完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ROI
ROI(RegionOfInterest)是指需要处理的那一部分图像,本节将通过一个示例讲解通过鼠标选中图形ROI区域。 1.1Python3 在Python中,主要涉及到selectROI函数,其函数原型如下: rect=cv2.selectROI(“image”,img,showCrosshair,fromCenter) “image”:winName窗口名称 img:目标想要裁剪的图像 showCrosshair:是否显示网格 True:显示网格 False:只有矩形 fromCenter: True:第一次选中的点为矩形的中心。 False:第一次选中的点为矩形的左上角。 返回的是一个tuple值,代表矩形区域。分别代表矩形左上角坐标(x,y)与矩形宽度w跟高度h (x,y,w,h)=rect 使用numpy切片功能的时候要注意,第一维指的是行数,第二维度指的是列数。 imCrop=img[y:y+h,x:x+w] 接下来,直接上源码: importnumpyasnp importcv2 img=cv2.imread(‘color.jpg’) #createawindow cv2.namedWindow(‘image’,flags=cv2.WINDOW_NORMAL|cv2.WINDOW_FREERATIO) cv2.namedWindow(‘image_roi’,flags=cv2.WINDOW_NORMAL|cv2.WINDOW_FREERATIO) cv2.imshow(‘image’,img) #whethertoshowcrosschair showCrosshair=True #iftrue,thenfromthecenter #iffalse,thenfromtheleft-top fromCenter=False #thenletusetochoosetheROI rect=cv2.selectROI(‘image’,img,showCrosshair,fromCenter) #gettheROI (x,y,w,h)=rect #Cropimage imCrop=img[y:y+h,x:x+w] #Displaycroppedimage cv2.imshow(‘image_roi’,imCrop) #writeimagetolocaldisk cv2.imwrite(‘image_roi.png’,imCrop) cv2.waitKey(0) 运行结果如下图所示: 运行程序后,按住鼠标左键选中ROI,按下Enter键裁剪得到需要的ROI区域,并显示到另一个窗口中,如果需要取消ROI区域选择,请按下C键。 1.2C++ #include《iostream》 #include《opencv2/opencv.hpp》 #include《opencv2/highgui/highgui.hpp》 #include《opencv2/imgproc/imgproc.hpp》 usingnamespacestd; usingnamespacecv; intmain() { Matimg,imCrop; Rectrect; img=imread(“color.jpg”); //createawindow namedWindow(“image”,WINDOW_NORMAL|WINDOW_FREERATIO); namedWindow(“image_roi”,WINDOW_NORMAL|WINDOW_FREERATIO); imshow(“image”,img); //whethertoshowcrosschair boolshowCrosshair=true; //iftrue,thenfromthecenter //iffalse,thenfromtheleft-top boolfromCenter=false; //thenletusetochoosetheROI rect=selectROI(“image”,img,showCrosshair,fromCenter); //gettheROIandcroptheimage imCrop=img(rect); //Displaycroppedimage imshow(“image_roi”,imCrop); //writeimagetolocaldisk imwrite(“image_roi.jpg”,imCrop); waitKey(0); return0; } 其C++源码运行效果同Python源码。 |
|
|
|
绘图
接下来将讲解OpenCV中绘图的使用,在计算机视觉领域,使用绘图功能是一个非常高频的需求,例如,在颜色识别,人脸识别,物体识别中,识别到具体的物体,可以将其打印出来,也可以直接在原图中绘制一个圆形等,显而易见,后者效果更好。 注意,OpenCV可以绘制的图形,其实matplotlib也都可以,OpenCV之所以还提供一个绘图功能是因为OpenCV绘图是直接在原图上进行绘图的,并且使用的是默认的BGR色彩空间,所以,OpenCV默认的绘图功能会更加方便一些。 2.1Python3 接下来首先介绍在OpenCV中常见的几何图形绘制与文本绘制,例如,直线,矩形,圆形,多边形,椭圆等。 初始化画布 在Python中,图像数据是通过numpy的ndarray存储的,首先,应当初始化一个ndarra数据结构用于存储图像:具体处理如下所示: defInitPaint(width,height,color=(255,255,255)): paint=np.ones((height,width,3),dtype=“uint8”) paint[:]=color returnpaint 绘制直线 函数的函数原型: cv2.line(img=canvas,pt1=(300,0),pt2=(0,300),color=COLOR_MAP[“red”],thickness=3) 绘制矩形 函数原型: cv2.rectangle(img=canvas,pt1=(50,200),pt2=(200,225),color=COLOR_MAP[“green”],thickness=5) 绘制圆形 函数原型 cv2.circle(img=canvas,center=(150,150),radius=60,color=(0,0,255),thickness=5) 绘制多边形 函数原型 cv2.polylines(img=canvas,pts=[points],isClosed=True,color=(0,0,255),thickness=3) 绘制椭圆 函数原型 cv2.ellipse(img=canvas,center=(256,256),axes=(100,50),angle=0,startAngle=0,endAngle=360,color=(100,200,0),thickness=-1) 绘制文字 函数原型 font=cv2.FONT_HERSHEY_SIMPLEX cv2.putText(canvas,text=“HelloWorld”,org=(50,200),fontFace=font,fontScale=2,thickness=1,lineType=cv2.LINE_AA,color=(0,0,255)) |
|
|
|
只有小组成员才能发言,加入小组>>
882 浏览 0 评论
1196 浏览 1 评论
2574 浏览 5 评论
2910 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2770 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1237浏览 3评论
222浏览 2评论
496浏览 2评论
403浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
484浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 22:49 , Processed in 0.925648 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号