2017-06-18 56 views
0

這裏是代碼片段:轉換1通道墊至3通道墊

private void loadImage(String path) 
{ 
    originalImage = Highgui.imread(path); 

    Log.i(TAG, "Number Of Channels: " + originalImage.channels()); 

    Mat rgbImage = new Mat(); 
    sampledImage = new Mat(); 

    Mat out = new Mat(); // Added 
    List<Mat> in = new ArrayList<>();// Added 
    in.add(originalImage);// Added 
    in.add(originalImage);// Added 
    in.add(originalImage);// Added 
    Core.merge(in, out);// Added 

    Log.i(TAG, "Number Of OUT Channels: " + out.channels()); 

    Imgproc.cvtColor(originalImage, rgbImage, Imgproc.COLOR_BGR2RGB); // error here 

originalImage是1信道和我需要將其轉換爲3通道。從上面的代碼生成的out mat仍然是1通道。我如何將外面的墊子轉換成3聲道?

回答

0

爲什麼不嘗試使用cvtColor(in, out, Imgproc.COLOR_GRAY2BGR),而不是將三個單通道圖像合併到一個單獨的Mat。不過我懷疑originalImage = Highgui.imread(path);會生成一個單通道圖像,讀取一個單通道,你需要通過0標誌來imread我猜,但是由於你記錄了Log.i(TAG, "Number Of Channels: " + originalImage.channels());通道的數量,所以也許我會錯過一些東西。您的代碼可以改寫爲(假設originalImage是單通道圖像):

private void loadImage(String path) 
{ 
    originalImage = Highgui.imread(path); 
    Mat out = new Mat(); 

    Log.i(TAG, "Number Of Channels: " + originalImage.channels()); 

    Imgproc.cvtColor(originalImage, out, Imgproc.COLOR_GRAY2RGB); 

    Log.i(TAG, "Number Of OUT Channels: " + out.channels()); 
} 
0

你可以轉換通道1墊使用Imgproc.cvtColor()方法的信道3。 作爲每文檔,cvtColor()具有第四參數 - >dstCn

dstCn - 目標圖像中的信道數;如果參數爲0,通道的數量從src和代碼自動導出

所以,你的情況,你可以把原來墊在如下3道墊:

Imgproc.cvtColor(originalImage, rgbImage, Imgproc.COLOR_BGR2RGB,3); // where 3 is channel number 

更多info,請查看cvtColor方法:cvtColor 希望它能工作!