矩形没有出现在opencv中

时间:2017-11-13 07:39:04

标签: python python-3.x opencv

为什么矩形没有显示在我的代码中?

import cv2

im = cv2.imread('players.bmp')

#im.shape >>returns (765,1365,3)

cv2.rectangle(im, (64,1248), (191,1311), (0,255,0), 2)
cv2.namedWindow("image", cv2.WINDOW_NORMAL)
cv2.imshow('image', im)
cv2.waitKey(0)
cv2.destroyAllWindows()

3 个答案:

答案 0 :(得分:0)

它不显示矩形,因为您将其绘制在图像外部。

为什么呢?你可能会问。很简单。你有这个:

#im.shape >>returns (765,1365,3)

这意味着

rows/height = 765
cols/width = 1365
channels = 3

然后你做

cv2.rectangle(im, (64,1248), (191,1311), (0,255,0), 2)

在这里你使用2个点,它们是元组(x,y),但是你正在编写它们就好像它们是元组(y,x)一样。我知道OpenCV在许多函数中使用了顺序(y,x),但这是因为它们将图像看作矩阵,通常用(行,列)访问,转换为(y,x)。在这个矩形的情况下,它们需要,它们以典型的笛卡尔方式(x,y)表示。

总之,只需将其更改为:

cv2.rectangle(im, (1248, 64), (1311, 191), (0,255,0), 2)

它应该有效。

答案 1 :(得分:0)

我在遇到相同问题时偶然发现了这个问题。就我而言,我正确地传递了xy以及x+wy+h。我犯了两个错误:

  • 我在tryexcept块中有这部分(所以我看不到出现异常)
  • 在绘制矩形之前,我的代码将h更改为数组。 (我从x,y,w,h中提取了x,y,w,h = cv2.boundingRect(cnt)的值,然后错误地将h更改为[1,-1,-1,-1]

答案 2 :(得分:0)

我对这个问题有一个完全不同的原因

对我来说它没有显示出来,因为我使用的是图像中的 numpy 视图,所以我没有使用 cv2.cvtColor(frame, cv2.COLOR_RGB2BGR),而是使用 frame[..., ::-1] 来转换 RGB 和 BGR。

不知何故,这使得结果不可变,当 cv2.rectangle 尝试写入它时,它只是不会改变。