Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用OpenCV填充二进制图像中的孔/区域_Python_Numpy_Opencv_Image Processing_Computer Vision - Fatal编程技术网

Python 使用OpenCV填充二进制图像中的孔/区域

Python 使用OpenCV填充二进制图像中的孔/区域,python,numpy,opencv,image-processing,computer-vision,Python,Numpy,Opencv,Image Processing,Computer Vision,我有下面的预处理大米图像。我想用黑色填充大米,然后执行反向操作以找到轮廓。我尝试使用腐蚀/膨胀操作,但不起作用。下面是我正在使用的代码片段 首先,我使用阴影去除算法,然后使用自适应阈值,从而得到输入图像。现在,我想将输入图像更改为输出图像 原始图像: 输入图像: 所需输出图像: 代码段: oposite=cv2.按位\u非(img) #侵蚀 内核=np.ones((3,3),np.uint8) 侵蚀=cv2.扩张(des,内核,迭代次数=1) 侵蚀=cv2。按位\u非(侵蚀) im_out

我有下面的预处理大米图像。我想用黑色填充大米,然后执行反向操作以找到轮廓。我尝试使用腐蚀/膨胀操作,但不起作用。下面是我正在使用的代码片段

首先,我使用阴影去除算法,然后使用自适应阈值,从而得到输入图像。现在,我想将输入图像更改为输出图像

原始图像:

输入图像:

所需输出图像:

代码段:

oposite=cv2.按位\u非(img)
#侵蚀
内核=np.ones((3,3),np.uint8)
侵蚀=cv2.扩张(des,内核,迭代次数=1)
侵蚀=cv2。按位\u非(侵蚀)
im_out=磷石膏+侵蚀
cv2.imshow(“输出”,im_out)
cv2.等待键(0)

您可以使用方法中的标志和方法创建HSV掩码。我基本上将最大饱和值从
255
更改为
100

import cv2
import numpy as np

img = cv2.imread("rice.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([0, 0, 0])
upper = np.array([179, 100, 255])
mask = cv2.inRange(img_hsv, lower, upper)
cv2.imshow("Mask", mask)
cv2.waitKey(0)
import cv2
import numpy as np

img = cv2.imread("rice.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([0, 0, 0])
upper = np.array([111, 100, 255])
mask = cv2.inRange(img_hsv, lower, upper)
cv2.imshow("Mask", mask)
cv2.waitKey(0)
输出:


如果希望使颗粒变薄,可以将最大色调值从
179
调低到,比如说,
111
,同时将最大饱和度值调低到
100

import cv2
import numpy as np

img = cv2.imread("rice.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([0, 0, 0])
upper = np.array([179, 100, 255])
mask = cv2.inRange(img_hsv, lower, upper)
cv2.imshow("Mask", mask)
cv2.waitKey(0)
import cv2
import numpy as np

img = cv2.imread("rice.jpg")
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([0, 0, 0])
upper = np.array([111, 100, 255])
mask = cv2.inRange(img_hsv, lower, upper)
cv2.imshow("Mask", mask)
cv2.waitKey(0)
输出:


什么是“des”图像?你应该先反转你的图像,然后做一个膨胀,这应该会起作用。您可能需要调整内核大小。您的“期望输出”是原始图像。应用了无法撤消的非线性变换。因此,您无法从转换后的图像中检索原始图像。“des”是“反向图像”。它的打字错误。有没有一种方法可以使用洪水填充?洪水填充也可以填充大米之间的孔洞。你最好的办法是检测果仁,然后把它们画成填充形状。@RajatHada我补充了一个答案。请让我知道它是否解决了您的问题,如果没有,为什么。谢谢。它解决了问题:)。我将用阴影较多的图像检查这种方法。