【问题标题】:how to remove the white pixel around the image?如何去除图像周围的白色像素?
【发布时间】:2021-10-12 01:47:37
【问题描述】:

如何合并图像或其他方法,以使边界中的像素总和小于孔 x 和 y 位置。我的意思是在下面的图片中

白洞x和y的像素总和必须在孔位置更高,但如图所示,图像周围尤其是x像素的总和更高

通过这种方式,我想找到具有高值的总和像素并说明孔像素或坐标。在 y 轴上,总和当然是因为下面的结果比 x 好,但在其他一些情况下,当然,我通过下面的代码裁剪所有 1000 张图像,然后返回它们的像素数据总和和 id并说明了返回孔的最大值。

img = Image.open('J:\py.pro\path\picture_1.png').convert('L')  # convert image to 8-bit grayscale

if img.mode == "CMYK":
    # color profiles can be found at C:\Program Files (x86)\Common Files\Adobe\Color\Profiles\Recommended
    img = ImageCms.profileToProfile(img, "USWebCoatedSWOP.icc", "sRGB_Color_Space_Profile.icm", outputMode="RGB")
# PIL image -> OpenCV image; see https://stackoverflow.com/q/14134892/2202732
img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)

## (1) Convert to gray, and threshold
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
th, threshed = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)

## (2) Morph-op to remove noise
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10,30))
morphed = cv2.morphologyEx(threshed, cv2.MORPH_CLOSE, kernel)

## (3) Find the max-area contour
cnts = cv2.findContours(morphed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
cnt = sorted(cnts, key=cv2.contourArea)[-1]

## (4) Crop and save it
x,y,w,h = cv2.boundingRect(cnt)
dst = img[y:y+h, x:x+w]

# add border/padding around the cropped image
# dst = cv2.copyMakeBorder(dst, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=[255,255,255])

#cv2.imshow("J:\\py.pro\\path\\pic_1.png", dst)
cv2.imwrite("J:\\py.pro\\path\\pic_1.png", dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

  • 我的回答解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…

标签: image coordinates crop pixel grayscale


【解决方案1】:

如何在所有边添加一个 1 像素宽的白色边框,并从 (0,0) 开始用黑色填充白色像素,以便填充围绕边缘流动,填充图像边缘的所有白色区域?

我将用洋红色来演示泛光填充,以便您查看受影响的像素:


我实际上在终端中使用 ImageMagick 做到了这一点,但您可以使用 OpenCV 做同样的事情:

magick lattice.png -bordercolor white -border 1 -fill magenta -draw 'color 0,0 floodfill' result.png

【讨论】:

  • 对不起,我不明白你的代码是否是python代码,是否可以将其添加到程序中?
  • 识别洋红色像素对您有帮助吗?
  • 显然,图表显示了它对边界的影响
  • 但是我怎样才能应用到所有图像呢?是否可以通过裁剪和遮蔽边界的白色或透明来做到这一点?
  • 好的,你可以使用copyMakeBorder()stackoverflow.com/a/36259457/2836621周围添加一个1像素的白色边框,或者创建一个比初始图像高2像素、宽2像素的白色图像,然后粘贴进去您的原始图像从 (1,1) 开始。然后使用floodFill()
猜你喜欢
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2010-09-08
  • 2017-10-28
相关资源
最近更新 更多