Python 删除附加到图像边框的元素
我正在使用OpenCV通过图像处理在胸部x光检查中检测肺炎,所以我需要删除图像边界的附加区域以仅获取肺部,有人能帮我用python编写此代码吗 这张图片解释了我想要什么Python 删除附加到图像边框的元素,python,opencv,image-processing,detection,Python,Opencv,Image Processing,Detection,我正在使用OpenCV通过图像处理在胸部x光检查中检测肺炎,所以我需要删除图像边界的附加区域以仅获取肺部,有人能帮我用python编写此代码吗 这张图片解释了我想要什么 这是原始图像您可以尝试使用边界作为标记的形态学重建。这是来自Matlab或倍频程的函数imclearborder的模拟 import cv2 import numpy as np img = cv2.imread('5R0Zs.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
这是原始图像您可以尝试使用边界作为标记的形态学重建。这是来自Matlab或倍频程的函数imclearborder的模拟
import cv2
import numpy as np
img = cv2.imread('5R0Zs.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 40, 255, cv2.THRESH_BINARY)[1]
kernel = np.ones((7,7),np.uint8)
kernel2 = np.ones((3,3),np.uint8)
marker = thresh.copy()
marker[1:-1,1:-1]=0
while True:
tmp=marker.copy()
marker=cv2.dilate(marker, kernel2)
marker=cv2.min(thresh, marker)
difference = cv2.subtract(marker, tmp)
if cv2.countNonZero(difference) == 0:
break
mask=cv2.bitwise_not(marker)
mask_color = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
out=cv2.bitwise_and(img, mask_color)
cv2.imwrite('out.png', out)
cv2.imshow('result', out )
cv2.waitKey(0) # waits until a key is pressed
cv2.destroyAllWindows()
这就是我在Python/OpenCV中解决问题的方法。在四周添加白色边框,用黑色填充以替换白色,然后删除多余的边框 输入:
对不起,stackoverflow不是这样工作的。请再说一遍,你的问题不清楚。请详细说明你想要什么。是否要使黑色区域透明?或者希望将其修剪为白色区域周围最小的边界框。还是希望每个白色区域分开。我们不知道你所说的“删除”是什么意思!请张贴您的代码和原始图像。我只想得到白色的肺部区域,并将其他白色区域转换为背景(黑色区域),谢谢您的回答。您的输出是我想要的,但在我的代码中有一个错误。如果您愿意,我将向您展示我的完整代码,这就是错误所在。此语句中的错误:out=cv2。按位_和(img,mask_color)类型错误:参数“src1”应为Ptr。请尝试将第一个参数img替换为灰色或阈值。out=cv2.bitwise_和(灰色,遮罩_颜色)或out=cv2.bitwise_和(阈值,遮罩_颜色)。这是由于映像中的通道数造成的。还要确保映像img是从磁盘读取的。谢谢,效果很好
import cv2
import numpy as np
# read image
img = cv2.imread('lungs.jpg')
h, w = img.shape[:2]
# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# add 1 pixel white border all around
pad = cv2.copyMakeBorder(gray, 1,1,1,1, cv2.BORDER_CONSTANT, value=255)
h, w = pad.shape
# create zeros mask 2 pixels larger in each dimension
mask = np.zeros([h + 2, w + 2], np.uint8)
# floodfill outer white border with black
img_floodfill = cv2.floodFill(pad, mask, (0,0), 0, (5), (0), flags=8)[1]
# remove border
img_floodfill = img_floodfill[1:h-1, 1:w-1]
# save cropped image
cv2.imwrite('lungs_floodfilled.png',img_floodfill)
# show the images
cv2.imshow("img_floodfill", img_floodfill)
cv2.waitKey(0)
cv2.destroyAllWindows()