【问题标题】:Detecting coordinates in monocolor image检测单色图像中的坐标
【发布时间】:2019-11-06 01:43:00
【问题描述】:

我想找出黑色背景中白色区域(图片1)的坐标以便对其进行裁剪。我想分别裁剪所有这些白色区域。因此,我正在接近这些形状的轮廓,但它不起作用。同时,我把它当作一个对象来处理,但它也没有。因此,我必须如何接近这些白色区域才能检测和裁剪?

import numpy as np

img = cv2.imread("image.png")

bw = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(bw,127,255,0)

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


cntx1 = contours[0][0]
cntx = contours[0][1]

pt1 = (cntx1[0][0],cntx1[0][1])
pt2 = (cntx[0][0],cntx[0][1])

cv2.circle(img,pt1,5,(0,255,0),-1)
cv2.circle(img,pt2, 5, (0,255,0),-1)

cv2.imshow('f',img)

cv2.waitKey(0)
cv2.destroyAllWindows() ```

【问题讨论】:

  • 您希望检测和裁剪多少个白色区域?我假设您正在尝试裁剪大区域,所以 7?为需要裁剪的区域添加预期的输出图像会有所帮助
  • 它可以根据输入进行更改,但在一种情况下,它是 6 顺便说一句,我发现 400 个区域有代码,但它不起作用。我需要更高效的代码

标签: python opencv image-processing


【解决方案1】:

您可以使用cv2.bitwise_not 然后cv2.add 来完成。因为我没有你的源图像所以我做了一个。

img = cv2.imread("flower.jpg")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresh = cv2.threshold(gray,180,255,cv2.THRESH_BINARY)

bit_not = cv2.bitwise_not(thresh)
bit_not_bgr = cv2.cvtColor(bit_not, cv2.COLOR_GRAY2BGR)

res = cv2.add(bit_not_bgr,img)

cv2.imshow("img",img)
cv2.imshow("thresh",thresh)
cv2.imshow("bit_not",bit_not_bgr)
cv2.imshow("res",res)

【讨论】:

  • 我可以将彩色图片区分为黑白,但问题在于检测这些区域。我不知道如何在带有坐标的矩形中查找和显示。一般情况是找出图像中的问题区域,然后分别裁剪以在 ocr 中阅读。
猜你喜欢
  • 2020-05-19
  • 1970-01-01
  • 2017-06-09
  • 2018-08-31
  • 1970-01-01
  • 2018-07-16
  • 2020-08-19
  • 2011-04-11
  • 2015-10-22
相关资源
最近更新 更多