如何在cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2) 边上输出文字
时间: 2024-03-13 22:42:47 浏览: 157
要在cv2.rectangle()函数绘制的矩形边上输出文字,可以使用cv2.putText()函数。该函数的用法如下:
```
cv2.putText(img, text, org, font, fontScale, color, thickness, lineType, bottomLeftOrigin)
```
其中,img表示要绘制文字的图像,text表示要绘制的文字内容,org表示文字的左下角坐标,font表示字体,fontScale表示字体缩放因子,color表示文字颜色,thickness表示文字线条宽度,lineType表示线条类型,bottomLeftOrigin表示文字起点是否在左下角。
在你的代码中,你可以将cv2.putText()函数放在cv2.rectangle()函数之后,这样就可以在矩形边上输出文字了。具体来说,你需要确定文字的左下角坐标,可以根据矩形的左上角坐标和矩形高度宽度计算得到。比如,假设你要在矩形左上角的位置输出文字,可以这样计算:
```
text_org = (x, y - 10) # 文字左下角坐标
```
其中,10是文字离矩形边框的距离,你可以根据需要调整。然后,就可以使用cv2.putText()函数在矩形边框上输出文字了。
相关问题
cnts,_ = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) for c in cnts: (x,y,w,h)=cv2.boundingRect(c) cv2.rectangle(img1, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2) cv2.rectangle(img2, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2)
这段代码的含义是在二值化图像`thresh`中找到所有的轮廓(contours),并对每一个轮廓进行处理。
对于每一个轮廓,使用`cv2.boundingRect()`函数计算其外接矩形,并用`cv2.rectangle()`函数在`img1`和`img2`两幅图像上绘制出这个外接矩形。
具体来说,`cv2.boundingRect()`函数的作用是计算轮廓的外接矩形,其输入参数为一个轮廓,返回值为外接矩形的左上角坐标`(x,y)`和宽度`w`、高度`h`。而`cv2.rectangle()`函数则用于在图像上绘制矩形,其输入参数为图像、矩形的左上角坐标`(x,y)`和右下角坐标`(x + w, y + h)`、颜色和线条粗细。
以下是完整的示例代码:
```
import cv2
# 读取图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 转换为灰度图像并进行二值化
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray1, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(gray2, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓并绘制外接矩形
cnts1,_ = cv2.findContours(thresh1,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts2,_ = cv2.findContours(thresh2,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for c in cnts1:
(x,y,w,h)=cv2.boundingRect(c)
cv2.rectangle(img1, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2)
for c in cnts2:
(x,y,w,h)=cv2.boundingRect(c)
cv2.rectangle(img2, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2)
# 显示结果
cv2.imshow('image1', img1)
cv2.imshow('image2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们首先读取两个图像`image1.jpg`和`image2.jpg`,然后将其转换为灰度图像并进行二值化处理。接着,使用`cv2.findContours()`函数查找轮廓,并对每个轮廓使用`cv2.boundingRect()`和`cv2.rectangle()`函数绘制外接矩形。最后,使用`cv2.imshow()`函数显示处理后的图像。
cnts,_ = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) for c in cnts: #获取边界框的位置 (x,y,w,h)=cv2.boundingRect(c) cv2.rectangle(img1, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2) cv2.rectangle(img2, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2)代码含义以及各个源代码的讲解
这段代码的含义是对二值化图像`thresh`中的所有轮廓(contours)进行处理,获取每个轮廓的边界框位置,并在`img1`和`img2`两幅图像上绘制出这个边界框。
具体来说,对于每个轮廓,使用`cv2.boundingRect()`函数获取其外接矩形的位置`(x,y,w,h)`,其中`(x,y)`为矩形左上角的坐标,`w`和`h`分别为矩形的宽度和高度。然后使用`cv2.rectangle()`函数在`img1`和`img2`两幅图像上绘制出这个边界框,其输入参数为图像、矩形的左上角坐标`(x,y)`和右下角坐标`(x + w, y + h)`、颜色和线条粗细。
以下是完整的示例代码:
```
import cv2
# 读取图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
# 转换为灰度图像并进行二值化
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray1, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(gray2, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓并绘制边界框
cnts1,_ = cv2.findContours(thresh1,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts2,_ = cv2.findContours(thresh2,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for c in cnts1:
(x,y,w,h)=cv2.boundingRect(c)
cv2.rectangle(img1, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2)
for c in cnts2:
(x,y,w,h)=cv2.boundingRect(c)
cv2.rectangle(img2, (x, y), (x + w, y + h), (0 ,0, 255), thickness=2)
# 显示结果
cv2.imshow('image1', img1)
cv2.imshow('image2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们首先读取两个图像`image1.jpg`和`image2.jpg`,然后将其转换为灰度图像并进行二值化处理。接着,使用`cv2.findContours()`函数查找轮廓,并对每个轮廓使用`cv2.boundingRect()`和`cv2.rectangle()`函数绘制边界框。最后,使用`cv2.imshow()`函数显示处理后的图像。
阅读全文