如何利用cv2.rectangle画多个框
时间: 2023-11-10 21:58:27 浏览: 551
您可以使用cv2.rectangle()函数画多个框,只需要在循环中使用这个函数即可。以下是一个示例代码:
```
import cv2
# 读取图片
img = cv2.imread('image.jpg')
# 定义框的坐标和颜色
boxes = [[10, 10, 100, 100], [150, 150, 200, 200]]
colors = [(255, 0, 0), (0, 255, 0)]
# 循环画框
for box, color in zip(boxes, colors):
x1, y1, x2, y2 = box
cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
# 显示图片
cv2.imshow('image', img)
cv2.waitKey()
cv2.destroyAllWindows()
```
其中,boxes表示框的坐标,可以是一个列表,每个元素是一个框的四个角的坐标;colors表示框的颜色,也可以是一个列表,每个元素是一个BGR颜色元组;zip()函数用于将这两个列表一一对应起来循环使用。另外,cv2.rectangle()函数的第四个参数是线宽,可以自行调整。
相关问题
cv2.rectangle虚线
cv2.rectangle函数默认是绘制实线的矩形,而不是虚线。在引用\[3\]中提到的参数lineType并不是指线型是实线还是虚线等,而是指线的产生算法。cv2.rectangle函数没有直接支持绘制虚线的功能。如果需要绘制虚线的矩形,可以通过绘制多个线段来模拟虚线的效果。可以使用cv2.line函数来绘制多个线段,设置合适的起点和终点位置,以及线的粗细和间隔,从而实现虚线的效果。
#### 引用[.reference_title]
- *1* *3* [【python-opencv】几种常见的绘图函数](https://blog.csdn.net/bsy1111/article/details/131069416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [cv2 rectangle,circle,putText,line,ellipse 画框、画点、添加文字、画线、画椭圆](https://blog.csdn.net/zhaosuyuan/article/details/116603980)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
import numpy as np import cv2 font= cv2.FONT_HERSHEY_SIMPLEX lower_red=np.array([0,127,128])#红色阈值下界 higher_red=np.array([10,255,255])#红色阈值上界 lower_green=np.array([35,110,106])#绿色阈值下界 higher_green=np.array([77,255,255])#绿色阈值上界 cap=cv2.VideoCapture(0)#打开电脑内置摄像头 cv2.namedWindow("Display_Image", cv2.WINDOW_NORMAL) if(cap.isOpened()): while(True): ret,frame=cap.read()#按帧读取,这是读取一帧 img_hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV) mask_red=cv2.inRange(img_hsv,lower_red,higher_red)#可以认为是过滤出红色部分,获得红色的掩膜 mask_green=cv2.inRange(img_hsv,lower_green,higher_green)#获得绿色部分掩膜 mask_green = cv2.medianBlur(mask_green, 7) # 中值滤波 mask_red = cv2.medianBlur(mask_red, 7) # 中值滤波 mask=cv2.bitwise_or(mask_green,mask_red)#三部分掩膜进行按位或运算 cnts1, hierarchy1 = cv2.findContours(mask_red, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) cnts3, hierarchy3 = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) for cnt in cnts1: (x,y,w,h)=cv2.boundingRect(cnt)#该函数返回矩阵四个点 cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)#将检测到的颜色框起来 cv2.putText(frame,'red',(x,y-5),font,0.7,(0,0,255),2) for cnt in cnts3: (x, y, w, h) = cv2.boundingRect(cnt) # 该函数返回矩阵四个点 cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # 将检测到的颜色框起来 cv2.putText(frame, 'green', (x, y - 5), font, 0.7, (0,255,0), 2) cv2.imshow('frame',frame) k=cv2.waitKey(20)&0xFF if k ==27: break cv2.waitKey(0) cv2.destroyAllWindows()这段代码为什么打不电脑自带的摄像头
这段代码可能无法打开电脑自带的摄像头的原因有几种可能性:
1. 摄像头权限问题:请确保你的代码运行在有摄像头访问权限的用户下。
2. 摄像头驱动问题:有些摄像头需要特定的驱动程序才能正常工作。请检查你的摄像头是否需要安装相应的驱动程序。
3. 摄像头设备号错误:在`cap=cv2.VideoCapture(0)`这一行中,参数`0`表示默认使用设备号为0的摄像头。如果你的电脑有多个摄像头,可能需要更改该参数来指定正确的摄像头设备号。
如果上述解决方法都无效,可以尝试使用其他相机软件(如Zoom、Skype等)来确认摄像头是否正常工作,并检查是否需要更新摄像头驱动程序。
阅读全文