【问题标题】:OpenCV cv2.rectangle output binary imageOpenCV cv2.rectangle 输出二值图像
【发布时间】:2017-03-24 08:32:36
【问题描述】:

我一直在尝试在黑色图像上绘制矩形,我们cv2.rectangle。这是我的代码:(这只是一个示例,在实际代码中存在一个循环,即值 x2、y2、w2、h2 变化一个循环)

  heir = np.zeros((np.shape(image1)[0],np.shape(image1)[1]),np.uint8);
  cv2.rectangle(heir,(x2,y2),(x2+w2,y2+h2),(255,255,0),5)
  cv2.imshow("img",heir);
  cv2.waitKey()

它给出以下输出: 为什么图像是这样的?为什么边界不仅仅是一条宽度为 5 的线。 我试过了,但我无法弄清楚。

【问题讨论】:

  • 这是来自 imshow 的屏幕截图吗?原始图像的分辨率是否更高(例如 5x?),因此在图像被下采样显示时线条会丢失吗?如果您在较小的图像上执行这些操作会发生什么?
  • 感谢您的评论。不,事实并非如此。它是全尺寸图像。我没有进行任何处理(下采样或上采样)。这是imwrite版本
  • x2,y2,w2,h2 的典型值是多少?
  • 使用 np.zeros 创建继承人时,您会创建单层 np.uint8 作为数据类型 - 这是否意味着您有 8 位像素,(255,255,0)如何映射到这个时你画矩形?即你不应该使用 np.zeros((np.shape(image1)[0],np.shape(image1)[1],3),dtype=np.uint8) - 添加 3,使用显式命名参数)
  • 我只想要二进制图像。轮廓不一定是彩色的。它可以是白色的。实际上我用 cv2.contours 做了完全相同的事情,它给了我输出。我不知道 cv2.rectangle 有什么问题

标签: python opencv contour


【解决方案1】:

不能在评论中发布,但这是一个否定的答案:相同的操作在 Windows/python 2.7.8/opencv3.1 上对我有效

import numpy as np
import cv2

heir = np.zeros((100,200),np.uint8);
x2=10
y2=20
w2=30
h2=40
cv2.rectangle(heir,(x2,y2),(x2+w2,y2+h2),(255,255,0),5)
cv2.imshow("img",heir);
cv2.waitKey()

【讨论】:

  • 那么为什么要使用青色 (255,255,0) 作为矩形的颜色呢?如果您想要白色,请制作 (255,255,255)。
  • 是的,我已经尝试了所有的可能性。我做了 (255,255,255), (255,255,0),(255,0,255) 和简单的 255。没有任何效果
  • 你给出的答案也是2频道。我想知道为什么会发生在我身上
  • 其实我给出的维度是:x1 = np.int(np.ceil(x1 *np.shape(image1)[1]/700));
  • 这意味着什么?
【解决方案2】:

因为您正在以灰度加载要标记的图像(绘制矩形),所以当您添加矩形/边界框时,颜色会被转换为灰度。

要解决此问题,请以“颜色”格式打开图像。由于您没有包含该部分代码,因此建议的解决方案如下:

tag_img     = cv2.imread(MYIMAGE,1)

注意这里的第二个参数,“1”,表示加载图片为颜色。在此处阅读有关阅读图像的更多信息:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_image_display/py_image_display.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2013-12-25
    • 2021-04-23
    • 2014-10-30
    • 2011-07-13
    • 1970-01-01
    相关资源
    最近更新 更多