cv2.rectangle 这个函数的作用是在图像上绘制一个简单的矩形。
opencv 官网上给出的 cv2.rectangle 函数定义 如下:
Python: cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → None
- img – Image.
- pt1 – Vertex of the rectangle.
- pt2 – Vertex of the rectangle opposite to pt1 .
- color – Rectangle color or brightness (grayscale image).
- thickness – Thickness of lines that make up the rectangle. Negative
values, like CV_FILLED , mean that the function has to draw a filled
rectangle. - lineType – Type of the line. See the line() description.
— 8 (or omitted) - 8-connected line.
— 4 - 4-connected line. - —CV_AA - antialiased line.
- shift – Number of fractional bits in the point coordinates.**
文章目录
图片
pt1 和 pt2 参数
color 参数
thickness 参数
lineType 参数
shift 参数
图片
我们比较关系的是 pt1 和 pt2 这两个参数是什么含义。
(图来自 https://blog.csdn.net/lonelyrains/article/details/50388999)
pt1 和 pt2 参数
我们可以看到这个图十分的规整,你把它下下来后就可以发现它是 1200×750 的。因此每一个人物的大小就是 240×375,我们就利用这个规整性来探究一下那两个参数是什么意思。
import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\20151223182909577.png")
print(img.shape) # 图片大小
cv2.rectangle(img, (240, 0), (480, 375), (0, 255, 0), 2)
cv2.imshow("fff", img)
输出 (750, 1200, 3) 3 是指 3 通道,表示这个图片宽度是 1200 像素,高度是 750像素。
参考 Accessing Image Properties
然后根据 stackoverflow 的图示 https://stackoverflow.com/questions/23720875/how-to-draw-a-rectangle-around-a-region-of-interest-in-python
import cv2
cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)
x1,y1 ------
| |
| |
| |
--------x2,y2
我们就可以很容易的得出结论 cv2.rectangle 的 pt1 和 pt2 参数分别代表矩形的左上角和右下角两个点,而且 x 坐标轴是水平方向的,y 坐标轴是垂直方向的。
color 参数
color 参数一般用 RGB 值指定,表示矩形边框的颜色。RGB 对应的颜色可以使用 https://www.sioe.cn/yingyong/yanse-rgb-16/ 查看。
import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\20151223182909577.png")
print(img.shape)
cv2.rectangle(img, (240, 0), (480, 375), (0, 0, 255), 2)
cv2.imshow("fff", img)
thickness 参数
thickness 参数表示矩形边框的厚度,如果为负值,如 CV_FILLED,则表示填充整个矩形。
import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\20151223182909577.png")
print(img.shape)
cv2.rectangle(img, (240, 0), (480, 375), (0, 255, 0), -1)
cv2.imshow("fff", img)
lineType 参数
line() function 中有这样一段说明:
The function line draws the line segment between pt1 and pt2 points in the image. The line is clipped by the image boundaries. For non-antialiased lines with integer coordinates, the 8-connected or 4-connected Bresenham algorithm is used. Thick lines are drawn with rounding endings. Antialiased lines are drawn using Gaussian filtering. To specify the line color, you may use the macro CV_RGB(r, g, b)
这个参数看上去是指定 Bresenham 算法是 4 连通的还是 8 连通的,涉及到了计算机图形学的知识。如果指定为 CV_AA,则是使用高斯滤波器画反锯齿线。
shift 参数
shift 参数表示点坐标中的小数位数,但是我感觉这个参数是在将坐标右移 shift 位一样。shift 为 1 就相当于坐标全部除以 2^1
shift 为 2 就相当于坐标全部除以 2^2
import cv2
img = cv2.imread(r"C:\Users\Administrator\Desktop\20151223182909577.png")
print(img.shape)
cv2.rectangle(img, (240*2*2, 0), (480*2*2, 375*2*2), (0, 255, 0), 2, shift=2)
cv2.imshow("fff", img)