opencv cvtcolor函数,

  opencv cvtcolor函数,

  OpenCV-Python接口中的1cv2.findContours(),cv2.findContours))函数找到被检测对象的轮廓。

  2.查找上下文(图像,模式,方法,轮廓=无,层次=无,偏移=无(3358 www.Sina.com/http://www.Sina.com/image, http://www.Sina.com,当查找轮廓图像

  Opencv3返回三个值:img、countours和hierarchy。

  在模式的检索模式中有四种轮廓近似的方法,四种轮廓使用findContours检测到的轮廓数据,每个轮廓保存为一个点矢量。vectorhierarchy信息偏移选项轮廓偏移参数的类型是用于绘制偏移偏移(dy)轮廓的偏移。http://www.Sina.com/http://www.Sina cv2 . retr _ external只检测外轮廓cv2的内孔中有连通对象。RETR _列表,对象的边界也在顶层。2.cv2。RETR树检测所有轮廓并建立完整的层次结构。建立网络轮廓结构http://www.Sina.com/method 3358 www.Sina.com/cv2.chain_approx_none,得到每个轮廓像素的两个相邻点之间的像素差为1cv2。水平方向、垂直方向和对角线方向的Chain _ approximate _ simple压缩元素,其中的值保持该方向的关键坐标。当一个矩形的轮廓信息只能保存4个点时,cv2 . chain _ approximate _ TC89 _ L1teh-Chinichen逼近算法cv2 . chain _ approximate _ TC89 _ kcosteh-Chinichen逼近算法函数先返回列表。列表中的每个元素都是图像中的轮廓信息,并且列表中的每个元素(轮廓信息)都属于ndarray类型。Len(contours[1])表示保存在第一个轮廓中的元素数,即保存在轮廓中的点数。

  1.2层次返回值该函数还返回可选的层次结果。这是ndarray,元素个数和等高线一样。每个轮廓轮廓[i]对应于四个层次元素,层次[I][0]~层次[1]

  第一个数字:代表同一级别轮廓的下一个轮廓的数字。如果这一级的大纲没有下一级大纲,通常在这一级大纲的最后时刻为-1。第二个数字:同级轮廓之前的轮廓的数字。如果这一级别的大纲没有前一级大纲,通常在这一级别的第一级大纲处为-1。第三个数字:表示此大纲中包含的下一级大纲的开始的数字。如果没有-1。第四个数字:表示其轮廓上的前一个轮廓的编号。如果只有一个大纲-1。1.3栗子参数

  3358 www.Sina.com/import cv 2 img=cv2 . im read(。/Davis-2016/annotations/1080 p/flamingo/0007 . png 16)cv2。CHAIN _ APPROX _ SIMPLE)print)len)Returns))print)cv2 . CHAIN _ app prox _ s返回的长度为三,Returns决定三个值。这是因为opencv3版本的cv2.findContours)函数的返回值是三个,而且都是tuple类型,所以作为一个参数接收时会收到三个值。(opencv2版本只返回两个值。)。

  描述

  导入cv2img

  =cv2.imread(././Davis-2016/annotations/1080 p/flamingo/0007 . png ,0) img=cv2.resize (img,(16,16)) #为了方便显示,调整下一个尺寸# print (img.return2=cv2.findContours(img,cv2。RETR树,2。cv chain _ Proxy _ Simple)# print(returns)# print(len(returns))# print(type(returns))# resultsvalueerror:要解包的值太多(应为2)。如您所见,代码执行不正确。值错误:要解包的值太多(应为2个)

  以三个参数去接收返回值,每个参数各接收一个返回值导入cv2img=cv2.imread(././DAVIS-2016/Annotations/1080 p/flamingo/00007 . png ,0)img=cv2.resize(img,(16,16) # print (img.shape) image,contexts,hierarchy=cv2.findcontexts (img,cv2.retr _ tree,cv2 . chain _ approximate _ simple)print(image)print(contexts)print(hierarchy)输出结果:

  [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 255 255 0 255 255 0 0 0] [ 0 0 0 0 0 0 0 255 255 255 0 0 0 0 0 0] [ 0 0 0 0 0 0 255 255 255 0 255 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 255 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0[array([[[8,10]]],dtype=int32),array([[[11,5]],[[12,5]],dtype=int32),array([[[ 9,4],] 7]],[[ 8,7]],[[9,6]],[[10,7]],[[9,6]],dtype=int 32]][[1-1-1-1][20-1-1][-1 1 1-1]处理后的图像的第二个返回值是点集print(type(contours))# output:class list print(type(contours[0])# output:class numpy . ndarray print(len(contours))#图像中轮廓的个数第三个返回值是索引print(层次)# results[[1-1-1-1][20-1-1][-1 1-1]]]。具体意思不解释。

  2 cv2.drawContours() OpenCV通过cv2.drawContours在图像上绘制轮廓。

  cv2.drawContours(image,Contours,contourIdx,color,thickness=None,lineType=None,hierarchy=None,maxLevel=None,Offset=None)参数描述返回值要勾画的目标图像的图像。请注意,这将改变在原始图像中绘制的图像数组轮廓的轮廓点。上述函数cv2.findContours()的第一个返回值返回contourIdx的索引,指示要绘制哪个轮廓。-1表示绘制的所有轮廓的颜色厚度,而-1表示用线型可选参数填充的轮廓的宽度。)轮廓类型,包括cv2。LINE_4,cv2。LINE_8(默认)和cv2。LINE_AA,分别代表4条邻域线和8条域线。抗锯齿线条(能更好的显示曲线)层次结构(可选参数),上述函数cv2.findContours()的第二个返回值,与maxLevel参数配合使用,maxLevel(可选参数)等于0只画指定轮廓,等于1画指定轮廓及其下一个子轮廓。2等于指定轮廓的轮廓点的偏移及其所有子轮廓偏移(可选参数)。3该示例将二进制映像import cv2import numpy读取为np#并读取二进制映像img=cv2.imread(././Davis-2016/annotations/1080 p/flamingo/0007 . png )img=CV2 . resize(img,(224,224)) #灰度图像img _ gray=cv2.cvtcolor (img,cv2.color _ bgr2gray) #获取轮廓图像,轮廓,层次=cv2.findcontexts (img _ gray,cv2.retr _ tree,cv2.chain _ approximate _ simple) #创建一个白色幕布并绘制temp=NP . ones(one绘制等值线(Temp,Contours,-1,(0,255,0),3) CV2。即时消息显示(图片,)

  读入RGB图像:灰度和二进制原始图像:

  导入cv2将数组导入为np#读入RGB图像图像img=cv2.imread(././DAVIS-2016/JPEGImages/1080 p/flamingo/00007。jpg )img=cv2。调整大小(img,(224,224))#灰度化img_gray=cv2.cvtColor(img,cv2 .COLOR_BGR2GRAY)#二值化ret,binary=cv2.threshold(img_gray,127,255,cv2 .THRESH_BINARY)#获取轮廓图像,轮廓,层次=cv2.findContours(二进制,cv2 .获得文件树,cv2 .CHAIN_APPROX_SIMPLE)#白色幕布temp=np.ones(img_gray.shape,np.uint8) * 255#绘制轮廓,在白色幕布上绘制,也可以在原图上绘制cv2.drawContours(temp,Contours,-1,(0,0,255),3)cv2.imshow(img ,img) #原图cv2.waitKey()cv2.imshow(gray ,img_gray) #灰度图cv2。等待键()cv2。即时消息显示(二进制,二进制)#二值图cv2。等待键()cv2。im show( result ,temp)cv2.waitKey()结果:

  在白色幕布上绘制

  在原图上绘制

  参考:

  https://博客。csdn。net/Easen _ Yu/article/details/89365497https://博客。csdn。net/Keith _ bb/article/details/70185209https://博客。csdn。net/hjxu 2016/文章/详情/77833336

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: