gpt4 book ai didi

android - 使用 opencv 在 Android 中进行阈值处理

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:59 26 4
gpt4 key购买 nike

不确定这是否是正确的询问方式,但请帮忙。我有一张凹陷的汽车的图像。我必须对其进行处理并突出显示凹痕并返回凹痕的数量。我能够相当好地完成以下结果:

enter image description here

enter image description here

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 执行此操作时,我得到以下信息:

enter image description here

使用以下代码:

   Imgproc.cvtColor(source, middle, Imgproc.COLOR_RGB2GRAY);
Imgproc.equalizeHist(middle, middle);
Imgproc.threshold(middle, middle, 150, 255, Imgproc.THRESH_OTSU);

请告诉我如何在opencv中获得更好的结果,以及如何计算凹痕?我试过 findcontour() 但它给出了一个非常大的数字。我也尝试了其他图像,但没有得到正确的结果。请帮忙。

最佳答案

所以你基本上来自MATLAB site , imtophat 执行 - 顶帽过滤计算图像的形态学开运算(使用 imopen),然后从原始图像中减去结果。

您可以通过以下步骤在 OpenCV 中执行此操作:

第一步:获取disk结构元素

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15))

第二步:计算图像的开度,然后从原始图像中减去结果

tophat = cv2.morphologyEx(v, cv2.MORPH_TOPHAT, kernel)

这给出了以下结果 -

TopHat

第 3 步 - 现在您可以手动设置阈值或使用 Otsu -

ret, thresh = cv2.threshold(tophat, 17, 255, 0)

这给你下面的图像 -

topHat thresholded

由于 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) 上执行此操作,然后您可以适本地设置阈值。

关于android - 使用 opencv 在 Android 中进行阈值处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45319435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com