opencv 中未显示矩形

Nem*_*rai 5 python opencv python-3.x

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

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()
Run Code Online (Sandbox Code Playgroud)

api*_*i55 2

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

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

#im.shape >>returns (765,1365,3)
Run Code Online (Sandbox Code Playgroud)

这意味着

rows/height = 765
cols/width = 1365
channels = 3
Run Code Online (Sandbox Code Playgroud)

然后你就做

cv2.rectangle(im, (64,1248), (191,1311), (0,255,0), 2)
Run Code Online (Sandbox Code Playgroud)

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

总之,只需将其更改为:

cv2.rectangle(im, (1248, 64), (1311, 191), (0,255,0), 2)
Run Code Online (Sandbox Code Playgroud)

它应该有效。