[英]Thresholding in Android using opencv
不確定這是否是正確的詢問方式,但請幫忙。 我有一張凹陷車的圖像。 我必須處理它並突出凹痕並返回凹痕的數量。 我能夠很好地完成以下結果:
matlab代碼是:
img2=rgb2gray(i1);
imshow(img2);
img3=imtophat(img2,strel('disk',15));
img4=imadjust(img3);
layer=img4(:,:,1);
img5=layer>100 & layer<250;
img6=imfill(img5,'holes');
img7=bwareaopen(img6,5);
[L,ans]=bwlabeln(img7);
imshow(img7);
I=imread(i1);
Ians=CarDentIdentification(I);
但是,當我嘗試使用opencv執行此操作時,我得到了這個:
使用以下代碼:
Imgproc.cvtColor(source, middle, Imgproc.COLOR_RGB2GRAY);
Imgproc.equalizeHist(middle, middle);
Imgproc.threshold(middle, middle, 150, 255, Imgproc.THRESH_OTSU);
請告訴我如何在opencv中獲得更好的結果,以及如何計算凹痕? 我試過findcontour(),但它給出了一個非常大的數字。 我也嘗試過其他圖像,但是我沒有得到正確的結果。 請幫忙。
所以你基本上來自MATLAB網站 , imtophat
- Top-hat過濾計算圖像的形態開口(使用imopen),然后從原始圖像中減去結果。
您可以使用以下步驟在OpenCV中執行此操作:
第1步:獲取磁盤結構元素
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15))
步驟2:計算圖像的打開,然后從原始圖像中減去結果
tophat = cv2.morphologyEx(v, cv2.MORPH_TOPHAT, kernel)
這給出了以下結果 -
第3步 - 現在您可以手動閾值或使用Otsu -
ret, thresh = cv2.threshold(tophat, 17, 255, 0)
它給你以下圖像 -
由於OP需要Java代碼,這里是Java
可能的代碼:
private Mat topHat(Mat image)
{
Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(15, 15), new Point (0, 0));
Mat dst = new Mat;
Imgproc.morphologyEx(image, dst, Imgproc.MORPH_TOPHAT, element, new Point(0, 0));
return dst;
}
確保在灰度圖像( CvType.8UC1
)上執行此操作,然后您可以適當地設置閾值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.