opencv rectangle函数(python连接opencv库)

因为做程序图像剪切一直不太明白是怎么切片的,这里就用cv2.rectangle这个函数来看一下opencv是怎么计量图像的坐标轴的。opencv官网上给出的cv2.rectangle函数定义如下:Python:cv2.rectangle(img,pt1,pt2,color[,thickness[,lineType[,shift]]])→Noneimg–…

大家好,又见面了,我是你们的朋友全栈君。

因为做程序图像剪切一直不太明白是怎么切片的,这里就用 cv2.rectangle 这个函数来看一下 opencv 是怎么计量图像的坐标轴的。

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 这两个参数是什么含义。下面我就用一个程序为大家说明,我们程序用的图如下
图来自 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 坐标轴是垂直方向的。

− − − − − − − − − − − − − − > x ————–>x >x
∣ |
∣    x 1 , y 1 − − − − − − |\space \space x_1,y_1 ——   x1,y1
∣    ∣                                   ∣ |\space \space |\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space |                                    
∣    ∣                                   ∣ |\space \space |\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space |                                    
∣    ∣                                   ∣ |\space \space |\space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space \space |                                    
∣    ∣ − − − − − − − − x 2 , y 2 |\space \space | ——–x_2,y_2   x2,y2
∣ |
∨ \vee
y y 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)

在这里插入图片描述
需要注意的是这里的 (0, 0, 255) 三个分别对应 B G R。(不太懂为什么)

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)

在这里插入图片描述

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), 10)
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 2^1 21,shift 为 2 就相当于坐标全部除以 2 2 2^2 22

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)

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129572.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue子组件调用父组件函数_vue子组件修改父组件值

    vue子组件调用父组件函数_vue子组件修改父组件值vue子组件调用父组件的3种方法

    2022年10月2日
    4
  • Keil 使用教程(详解)「建议收藏」

    Keil 使用教程(详解)「建议收藏」(1)打开Keil,点击project新建(2)选择合适的型号,没有STC的选项,不要紧,一般C51的好多兼容的(3)不用汇编的话,下面的这个对话框选择否就可以了(4)点击新建一个文件(5)选择保存,并命名为.c(6)双击SourceGroup(7)添加.c文件(8)写完程序后,点击标号1处的按钮,然后点击标号2处的output,依次点击3和4,生成.hex文件…

    2022年5月10日
    44
  • 十进制小数转化为二进制小数[通俗易懂]

    十进制小数转化为二进制小数[通俗易懂]一、二进制数转换成十进制数由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为”按权相加”法。例如把二进制数110.11转换成十进制数。二、十进制数转换为二进制数十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。1.十进制整数转换为二进制整数十进制整数转换为二进制整数采用”除2取余,逆序排列”法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再

    2022年9月25日
    3
  • Java 定时器_Javaweb定时器

    Java 定时器_Javaweb定时器上篇提到了阻塞队列,本篇我们将优先级队列和阻塞队列结合,得到阻塞优先队列,以此来实现一个定时器~定时器定义应用场景定时器的实现:定时器构成代码实现:代码分析:忙等一处唤醒,两处阻塞附最终全部代码:完整的执行过程:定义定时器,是多线程编程中的一个重要/常用组件定时器可以强制终止请求:浏览器内部都有一个定时器,发送请求后,定时器就开始计时;若在规定时间内,响应数据没有返回,就会强制终止请求定时器,有些逻辑不想立刻执行,而是要等一定的时间之后,再来执行好比一个闹钟,在我们设定好闹钟时间后,到时

    2026年1月20日
    3
  • pythonrandom函数用法_python之random模块函数的使用

    pythonrandom函数用法_python之random模块函数的使用1)random.random()#用于生成一个0到1的随机浮点数,(0,1】2)random.randint(a,b)#用于生成一个指定范围内的整数,【a,b】3)random.randrange([start],stop[,step])#从指定范围内,按指定基数递增的集合中获取一个随机数。注意参数是整数,且不包括stop。random.randrange(10,30,2),结果相当…

    2022年5月13日
    67
  • webpack打包优化_webpack打包及部署

    webpack打包优化_webpack打包及部署2019独角兽企业重金招聘Python工程师标准>>>…

    2022年10月21日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号