2016-09-18 55 views
-1

我是openCV android圖像處理中的新手。但我面臨一些問題。當我在Android上使用OpenCV的我用墊,然後我的應用程序將粉碎....這有什麼問題.....爲什麼我的應用程序在我使用openCv時碾壓Mat

我的代碼是在這裏..:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    ImageView img=(ImageView) findViewById(R.id.imageView); 

    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.in); 

    Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1); 
    Utils.bitmapToMat(b, tmp); 
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY); 
     //there could be some processing 
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGB, 4); 
    Utils.matToBitmap(tmp, b); 
    img.setImageBitmap(b); 

} 
+0

嘗試註釋掉一些代碼行以提供最小代碼示例。哪條線路導致崩潰? –

回答

0

有多個問題:

  1. 地毯的構造函數是Mat(height, width, type),你倒過來的高度和寬度。

  2. CV_8UC1是單通道(灰度)。因此,如果需要提前創建Mat,則應該創建一個具有適當數量的頻道的Mat。我假設你想使用RGB圖像,所以使用CV_8UC3。但通常,如果大小不合適,函數會重新分配Mat。如果bitmapToMat也是這種情況,那麼還有另一個問題。

  3. Afaik,android使用RGBA作爲標準色彩空間。所以可能在Utils.bitmapToMat(b, tmp);之後tmp是一個4通道RGBA矩陣。因此,請嘗試Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGBA2GRAY);及更高版本Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGBA, 4);如果您不確定是否應該添加一些支票,如if Mat.channels isn't 3, don't try to convert RGB2GRAY如果檢查失敗,您可以嘗試查明真實的頻道數量以及原因。

相關問題