Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 删除附加到图像边框的元素_Python_Opencv_Image Processing_Detection - Fatal编程技术网

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)

我正在使用OpenCV通过图像处理在胸部x光检查中检测肺炎,所以我需要删除图像边界的附加区域以仅获取肺部,有人能帮我用python编写此代码吗

这张图片解释了我想要什么


这是原始图像

您可以尝试使用边界作为标记的形态学重建。这是来自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()