1
我想繪製一個最大的輪廓,我正在實時處理每個相機的框架。 我的輸入圖像是手,我有一些限制 - 黑色背景,沒有鏡面光。OpenCV Android,繪製最大的輪廓,有點不對
我期望最大的輪廓要儘可能接近下面的圖像可在網上
我的代碼如下,我剛纔提到很多樣,我幾乎一個想法,沒有什麼錯誤的,我碼。
mRgba = inputFrame.gray();
contours = new ArrayList<MatOfPoint>();
mcontours = new ArrayList<MatOfPoint>();
List<Mat> hull = new ArrayList<Mat>(contours.size());
hierarchy = new Mat();
Imgproc.Canny(inputFrame.gray(), mIntermediateMat, 50, 50);
Imgproc.findContours(mIntermediateMat, contours, hierarchy,
Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
for (int idx = 0; idx != contours.size(); ++idx)
{
Mat contour = contours.get(idx);
double contourarea = Imgproc.contourArea(contour);
Log.i(TAG, "maxAreaIdx =" + idx + "contourarea = " + contourarea);
if (contourarea > maxArea)
{
maxArea = contourarea;
maxAreaIdx = idx;
Log.i(TAG, "maxAreaIdx =" + maxAreaIdx + "MaxArea = " + maxArea);
}
}
if(maxAreaIdx > 0 && maxAreaIdx < contours.size())
mcontours.add(contours.get(maxAreaIdx));
else
break;
Imgproc.cvtColor(mIntermediateMat, mRgba, Imgproc.COLOR_GRAY2RGBA,
4);
hierarchy.release();
Imgproc.drawContours(mRgba, mcontours, -1, CONTOUR_COLOR, -1);
現在,我得到的只是這個的一小部分。我目前的理解是,OpenCV本身無法檢測到大的連續輪廓。請參考下面的圖片。
不僅如此,我測試了它的其他圖像一樣好,但我不知何故沒能獲得較大的大連續輪廓。
我在申請Canny時錯了嗎?有更好的技術嗎?我希望獲得手輪廓的輪廓。將來,我想將它與保存的類似輪廓數據庫進行比較。我在正確的軌道上嗎?