我是openCV的新手,我一直在爲Android提供的示例。在紙上檢測黑色墨水斑點 - Opencv Android
我的目標是檢測色塊,所以我開始使用色塊檢測示例。
我將彩色圖像轉換爲灰度,然後使用二進制閾值進行閾值處理。
背景是白色的,斑點是黑色的。我想檢測那些黑色斑點。此外,我想繪製他們的輪廓顏色,但我不能做到這一點,因爲圖像是黑色和白色。
我已經設法在灰度中實現這一點,但我不喜歡如何繪製輪廓,這就像顏色容差太高,輪廓比實際的斑點大(可能斑點太小?)。我想我談論的這個'寬容'與setHsvColor有關,但我不太明白這個方法。
在此先感謝!順祝商祺
更新的詳細信息
我要跟蹤的圖像是墨分裂的。想象一張白紙與黑色墨水分裂。現在我正在實時進行拍攝(相機視圖)。實際的應用程序會拍攝照片並分析該照片。
正如我上面所說的,我從openCV GitHub回購中獲取了color-blob-detection示例(android)。我在onCameraFrame方法添加以下代碼(爲了將其轉換爲黑白實時)的皈依製成,所以如果油墨是黑色,藍色,紅色,我不介意:
mRgba = inputFrame.rgba();
/**************************************************************************/
/** BLACK AND WHITE **/
// Convert to Grey
Imgproc.cvtColor(inputFrame.gray(), mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
Mat blackAndWhiteMat = new Mat (H, W, CvType.CV_8U, new Scalar(1));
double umbral = 100.0;
Imgproc.threshold(mRgba, blackAndWhiteMat , umbral, 255, Imgproc.THRESH_BINARY);
// convert back to bitmap for displaying
Bitmap resultBitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
blackAndWhiteMat.convertTo(blackAndWhiteMat, CvType.CV_8UC1);
Utils.matToBitmap(blackAndWhiteMat, resultBitmap);
/**************************************************************************/
這可能不是最好的方法,但它的工作原理。
現在我想檢測黑色斑點(墨水分割)。我想他們會被檢測到,因爲Logcat(示例應用程序的日誌條目)會拋出檢測到的輪廓數量,但我無法看到它們,因爲圖像是黑白的,我希望輪廓是紅色的。
這裏是我開始使用RGB(彩色斑點檢測的,不是黑白圖像)。注意未檢測到小斑點。 (有可能檢測到它們嗎?還是它們太小?)
感謝您的幫助!如果您需要更多的信息,我會很樂意更新這個問題
UPDATE:彩色斑點檢測樣品(第二圖像)
GitHub Repo of openCV sample for Android
你好,你的問題是相當不提供信息。請上傳輸入圖像以及您的處理過程。這將有助於理解這個問題。作爲一個例子,看到這個問題:http://stackoverflow.com/q/10168686/1874627 – saurabheights
@saurabheights感謝您的評論。我會用更多的信息和代碼片段更新這個問題 – sebasira
好吧,我可以建議的東西很少。只要有一個很好的對比,不管小的還是大的斑點都不應該成爲問題。如果您可以找到大多數像素爲白色的區域(檢查連接的組件),您將獲得紙張區域。如果你發現一個子區域是黑色的(低於紙張區域的平均強度),你會發現所有的斑點。要繪製輪廓,您需要找到黑色區域的凸包。另外,您是否可以上傳代碼(或鏈接到它)以獲取第二個圖像輸出的實現方式。這裏遲到了,明天再檢查一下。感謝您的更新。 – saurabheights