python–OpenCV检测水果上的划痕

python–OpenCV检测水果上的划痕,第1张

概述对于Python中的一个小实验我正在做我想要找到水果的小划痕.划痕非常小,很难被人眼检测到.我正在使用高分辨率相机进行该实验.这是我想要检测的缺陷:原始图片:这是我的结果,只有很少的代码行:所以我找到了水果的轮廓.我怎样才能找到划痕? RGB值与水果的其他部分类似.那么如何区分划痕和水果的一部分呢?我的代码:# Imports import numpy as

对于Python中的一个小实验我正在做我想要找到水果的小划痕.划痕非常小,很难被人眼检测到.

我正在使用高分辨率相机进行该实验.

这是我想要检测的缺陷:

原始图片:

这是我的结果,只有很少的代码行:

所以我找到了水果的轮廓.我怎样才能找到划痕? RGB值与水果的其他部分类似.那么如何区分划痕和水果的一部分呢?

我的代码:

# importsimport numpy as npimport cv2import time# Read Image & Convertimg = cv2.imread('img_0441.jpg')result = cv2.cvtcolor(img,cv2.color_BGR2HSV)# Filteringlower = np.array([1,60,50])upper = np.array([255,255,255])result = cv2.inRange(result,lower,upper)kernel = cv2.getStructuringElement(cv2.MORPH_ELliPSE,(9,9))result = cv2.dilate(result,kernel)# Contoursim2,contours,hIErarchy = cv2.findContours(result.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)result = cv2.cvtcolor(result,cv2.color_GRAY2BGR)if len(contours) != 0:    for (i,c) in enumerate(contours):        area = cv2.contourArea(c)        if area > 100000:            print(area)            cv2.drawContours(img,c,-1,(255,0),12)            x,y,w,h = cv2.boundingRect(c)                        cv2.rectangle(img,(x,y),(x+w,y+h),(0,12)# Stack resultsresult = np.vstack((result,img))resultOrig = result.copy()# Save image to file before resizingcv2.imwrite(str(time.time())+'_0_result.jpg',resultOrig)# Resizemax_dimension = float(max(result.shape))scale = 900/max_dimensionresult = cv2.resize(result,None,fx=scale,fy=scale)# Show resultscv2.imshow('res',result)cv2.waitKey(0)cv2.destroyAllwindows()
最佳答案我将图像更改为HSL色彩空间.
我看不到L通道中的划痕,因此前面提到的灰度方法将很难.
但是在色调平面上划痕非常明显.

您可以使用边缘检测器找到色调通道中的瑕疵.在这里,我使用了高斯探测器的差异(尺寸为20和4).

总结

以上是内存溢出为你收集整理的python – OpenCV检测水果上的划痕全部内容,希望文章能够帮你解决python – OpenCV检测水果上的划痕所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存