嵌入式学习小组
直播中

李瑜斌

8年用户 117经验值
私信 关注

图像处理中ROI和绘图是如何操作的?

图像处理中ROI和绘图的操作

回帖(2)

王茜

2020-11-9 14:47:30
  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源码。
举报

许青云

2020-11-9 14:48:11
  绘图
  接下来将讲解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))
举报

更多回帖

发帖
×
20
完善资料,
赚取积分