Python OpenCV boundingRect输出
我不熟悉OpenCV和Python,我制作了一个程序,可以找到面积大于500的轮廓,并将它们保存到一个新图像中。我在互联网上建议使用boundingRect,它运行良好,但我在图像输出方面遇到了一个问题。似乎感兴趣区域附近的噪音也被保存了下来。如下图所示,在ROI旁边有一些微小的形状。输出对其他图像很好,只是我想消除像这样的噪音。有没有办法消除输出中的此类噪音 以下是我制作的程序的输出: 以下是输入图像:Python OpenCV boundingRect输出,python,opencv,Python,Opencv,我不熟悉OpenCV和Python,我制作了一个程序,可以找到面积大于500的轮廓,并将它们保存到一个新图像中。我在互联网上建议使用boundingRect,它运行良好,但我在图像输出方面遇到了一个问题。似乎感兴趣区域附近的噪音也被保存了下来。如下图所示,在ROI旁边有一些微小的形状。输出对其他图像很好,只是我想消除像这样的噪音。有没有办法消除输出中的此类噪音 以下是我制作的程序的输出: 以下是输入图像: 根据输入数据的假设,可能有几种解决方案 可能的方法 如果ROI的颜色与其他颜色明显不同
根据输入数据的假设,可能有几种解决方案 可能的方法
cv2.drawContours()
简单地在噪声上绘制黑色轮廓。我对黑白样本图像进行了几次迭代放大,按面积过滤轮廓,然后在噪声上绘制黑色轮廓线。我使用了阈值功能,因为在最初看似简单的黑白图像中发现了一些微小的噪声
输入:
代码:
导入cv2
阈值_值=10
img=cv2.imread(“cells_BW.jpg”)
img=cv2.medianBlur(img,5)
扩张=cv2。扩张(img,(3,3),迭代次数=3)
img_gray=cv2.CVT颜色(img,cv2.COLOR_BGR2GRAY)
(T,thresh)=cv2.阈值(img_灰度,thresh_值,255,cv2.thresh_二进制)
_,等高线,层次=cv2.findContours(阈值,cv2.RETR\u树,cv2.CHAIN\u近似值\u简单)
轮廓=[如果cv2.contourArea(i)<5000,则轮廓中的i表示i]
cv2.绘制等高线(img,等高线,-1,(0,0,0),10,线型=8)
imwrite(“cells\u BW\u CLEAN.jpg”,img)
输出:
你能发布你的输入图像吗?哦,是的,我当然会编辑帖子。你只想从黑白图像中删除小轮廓?是的,如果可能的话。如果你正确设置阈值,然后进行侵蚀,你就不必担心这些不需要的小斑点。
import cv2
thresh_value = 10
img = cv2.imread("cells_BW.jpg")
img = cv2.medianBlur(img, 5)
dilation = cv2.dilate(img,(3,3),iterations = 3)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(T, thresh) = cv2.threshold(img_gray, thresh_value, 255, cv2.THRESH_BINARY)
_, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = [i for i in contours if cv2.contourArea(i) < 5000]
cv2.drawContours(img, contours, -1, (0,0,0), 10, lineType=8)
cv2.imwrite("cells_BW_CLEAN.jpg", img)