2013-03-24 52 views
3

目前正在
流域例如

<code> 
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { 
     mRgba = inputFrame.rgba(); 
     Imgproc.Canny(mRgba, markers, 80, 90); 
     Mat threeChannel = new Mat(); 
     Imgproc.cvtColor(mRgba, threeChannel, Imgproc.COLOR_BGR2GRAY); 
     Imgproc.watershed(threeChannel, markers); 
     return threeChannel; 
} 

</code> 

然而,與

CvException [org.opencv.core.CvException: /home/reports/ci/slave/50-SDK/opencv/modules/imgproc/src/segmentation.cpp:147: error: (-210) Only 8-bit, 3-channel input images are supported in function void cvWatershed(const CvArr*, CvArr*) 

你能告訴我如何正確使用標記從坎尼/ Sobel邊緣檢測飼料失敗一個分水嶺算法?因爲這是我的第一個Android項目,所以Android特定的功能會非常有幫助。

+0

您是否設法解決了顯示純白圖像的問題?我現在面臨類似的問題,找不到任何解決方案。 – 2013-10-09 14:13:24

回答

4

該錯誤指出watershed()的輸入圖像必須是8位3通道圖像。撥打cvtColor()後,打印threeChannel的通道數。如果輸出,請不要感到驚訝。

通過mRgba直接到watershed(),看看會發生什麼。我以前的答案之一有working code using watershed,您可以使用它進行測試。

+0

乾杯,原始圖像mRgba有4個頻道,所以我使用'COLOR_BGRA2BGR'而不是'COLOR_BGR2GRAY'。現在問題是Canny返回'CV_8UC1'作爲標記輸出,而'watershed'則需要32位單通道圖像。我使用了mIntermediateMat.convertTo(mIntermediateMat,CvType.CV_32S);'但分水嶺的結果是純白色的圖像。有什麼建議出了什麼問題?也許從8位無符號到32位的轉換會使它變得複雜起來 – nmadzharov 2013-03-24 22:59:09

+0

讓我們一次解決一個問題。隨意在另一個線程中提出另一個問題。不要忘記投票我的答案,如果它幫助你,或點擊附近的複選框選擇它作爲官方問題解決者。我很想在新的問題中看到你的新代碼。 – karlphillip 2013-03-24 23:14:49

+0

不能真的發表另一個問題,因爲它仍然是一樣的 – nmadzharov 2013-03-24 23:25:27

1

您只需將圖像從4通道轉換爲3通道即可。 例如

Imgproc.cvtColor(mat , mat, Imgproc.COLOR_BGRA2BGR);