排行网站模板,长沙企业网站设计,工行gcms系统,青州市网站建设【1】引言
前序学习进程中#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注#xff0c;这种标注沿着图像的轮廓进行#xff0c;比较细致。相关文章链接为#xff1a;
python学opencv|读取图像#xff08;六十四#xff09;使用…【1】引言
前序学习进程中已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注这种标注沿着图像的轮廓进行比较细致。相关文章链接为
python学opencv|读取图像六十四使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注-CSDN博客
如果想用矩形将图像直接框选就是今天的学习目标 使用cv2.boundingRect()函数实现图像轮廓矩形标注。
【2】官网教程
点击下方链接直达cv2.boundingRect()函数官网教程
OpenCV: Structural Analysis and Shape Descriptors
官网页面对 cv2.boundingRect()函数的解释为 图1 官网页面对 cv2.boundingRect()函数的解释
其实可以根据字面意思理解bounding就是边界的意思rect代表rectangle矩形所以cv2.boundingRect()函数可以读取举行的边界值。
【3】代码测试
和之前一样cv2.boundingRect()函数要想用矩形作为标签标注图形的轮廓需要提前知晓图像的轮廓位置所以依然要调用 cv2.findContours()函数来找到轮廓。
cv2.boundingRect()函数和cv2.findContours()函数有一个共同点就是必须要对灰度图像才有效所以必须提前调用cv2.cvtColor()函数转换灰度图而为了更进一步突出灰度图有时候需要调用cv2.threshold()函数进行阈值处理。
如果对上述函数不熟悉可以通过下述链接回忆 python学opencv|读取图像六十四使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注-CSDN博客
python学opencv|读取图像十九使用cv2.rectangle()绘制矩形_python cv2.rectangle-CSDN博客
python学opencv|读取图像十一彩色图像转灰度图的两种办法_识别图像输出灰度图-CSDN博客
按照上述分析的逻辑代码设置为引入必要模块和图像图像灰度处理图像阈值处理给灰度图像找边界轮廓然后是绘制矩形标注。
此处直接给出完整代码
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src cv.imread(df.png) #读取图像srcx.png
graycv.cvtColor(src,cv.COLOR_BGR2GRAY) #将图像转化为灰度图#图像处理
canvas np.ones((580, 580, 3), np.uint8)*158 # 绘制一个580*580大小的画布3代表有3个通道unit8为图像存储格式
t,dstcv.threshold(gray,10,255,cv.THRESH_BINARY) #阈值处理
con,hierarchycv.findContours(dst,cv.RETR_LIST,cv.CHAIN_APPROX_SIMPLE) #读取边界
x,y,w,hcv.boundingRect(con[0]) #获取第一轮廓的最小矩形边框记录左上角坐标、宽和高print(con,len(con)) #输出con代表的轮廓列表数量
print(src.shape) #输出src图像基本属性
cv.rectangle(src,(x,y),(xw,yh),(0,100,255),5) #绘制矩形
#cv.imshow(ini-image , dst) #显示原始图像
cv.imshow(ini-image-con, src) #显示带轮廓线图像
canvascv.rectangle(canvas,(x,y),(xw,yh),(0,100,255),5)
cv.imshow(rectangle, canvas) # 在屏幕展示你画线段的效果
#cv.imshow(ini-image-gon, gray) #显示带轮廓线图像
cv.imwrite(ini-image-con.png, src) #保存图像
cv.waitKey() # 图像不关闭
cv.destroyAllWindows() # 释放所有窗口 代码运行的相关图像有 图2 初始图像df.png 图3 加矩形标注图像
由图2和图3可见图像识别成功并且画上了矩形标注框。
【4】细节说明
在使用纯黑白图像时顺利获得了如图2所示的矩形标注效果。
如果图像稍微复杂一些是否效果依旧显著。
将输出图像换位依旧是黑白为主色调的图像 图4 新的初始图像
代码运行后的实际效果为 图5 实际运行效果-标注了一个点
由图5可见实际运行效果只在人像上标注了一个点。
为此追溯了原因看读取的一些基本信息 图6 基本信息
在控制台获得了一些基本信息con代表获得的轮廓数第二行代表像素和通道。
显然第二个初始图像读出了2346个轮廓显然这个数据足够大具体使用哪个轮廓来绘制矩形很难选择。
然后对于第一个初始图像代码使用的轮廓为con[0]如果将其切换为con[1]
src cv.imread(df.png) #读取图像srcx.png
x,y,w,hcv.boundingRect(con[1]) #获取第一轮廓的最小矩形边框记录左上角坐标、宽和高
代码运行后的效果为 图7 第二个矩形轮廓
由图7可见如果使用第二个轮廓绘制的矩形框沿着图像的边缘。
综上使用cv2.boundingRect()函数对图像轮廓进行矩形标注图像的颜色单一才会更为准确。
【5】总结
掌握了pythonopencv通过使用cv2.boundingRect()函数对图像轮廓进行矩形标注的技巧。