概述
我在从彩色图像中获取二值图像时遇到了一个问题。cv2.inRange()函数用于获得图像的mask(类似于阈值),我想删除不必要的部分,最大限度地减少{}图像的侵蚀。最大的问题是masks没有被定期提取。在
样品
裂缝:
典型的
理想之选:
我的第一个目标是把第二张画成第三张。我想获得最大面积的轮廓并删除其他轮廓(同样适用于mask)将是可行的。但找不到怎么做。在
第二个问题是,我上面描述的想法不适用于第一张图片(裂缝)。这种图像可以丢弃。但无论如何,它应该被贴上裂纹的标签。到目前为止,我还没有这个想法。在
我做了什么
这里是输入图像和代码42_1.jpgclass Real:
__ex_low=np.array([100,30,60])
__ex_high=np.array([140,80,214])
__ob_low=np.array([25,60,50]) #27,65,100])
__ob_high=np.array([50,255,255]) #[45,255,255])
def __opening(self, mask):
kernel = np.ones((3,3), np.uint8)
op = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
return op
def __del_ext(self, img_got):
img = img_got[0:300,]
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, self.__ex_low, self.__ex_high)
array1 = np.transpose(np.nonzero(mask))
array2 = np.nonzero(mask)
temp=array1.tolist()
xmin=min(array2[0]) #find the highest point covered blue
x,y,channel=img.shape
img=img[xmin:x,]
hsv=hsv[xmin:x,]
return img, hsv
def __init__(self, img_got):
img, hsv = self.__del_ext(img_got)
mask_temp = cv2.inRange(hsv, self.__ob_low, self.__ob_high)
mask = self.__opening(mask_temp)
array1 = np.transpose(np.nonzero(mask))
array2 = np.nonzero(mask)
ymin=min(array2[1])
ymax=max(array2[1])
xmin=min(array2[0])
xmax=max(array2[0])
self.x = xmax-xmin
self.y = ymax-ymin
self.ratio = self.x/self.y
# xmargin = int(self.x*0.05)
#ymargin = int(self.y*0.05)
self.img = img[(xmin):(xmax),(ymin):(ymax)]
self.mask = mask[(xmin):(xmax),(ymin):(ymax)]
#models = glob.glob("D:/Python36/images/motor/*.PNG")
img = cv2.imread("D:/Python36/images/0404/33_1.jpg")#
#last_size = get_last_size(models[-1])
#m2= Model(models[39],last_size)
r1 = Real(img)
cv2.imshow("2",r1.img)
cv2.imshow("3",r1.mask)
如果代码是用python3编写的,那就太好了,但是一切都会好起来的。在
最后
以上就是义气苗条为你收集整理的python去除区域_裁剪特定颜色区域并移除噪波区域(Python+OpenCV)的全部内容,希望文章能够帮你解决python去除区域_裁剪特定颜色区域并移除噪波区域(Python+OpenCV)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复