当前位置: 首页 > news >正文

广州专业网站设计公司个人网页设计作品下载

广州专业网站设计公司,个人网页设计作品下载,微信第三方网站开发教程,江西论坛轮廓自身的一些属性特征及轮廓所包围对象的特征对于描述图像具有重要意义。本节介绍几个轮廓自身的属性特征及轮廓所包围对象的特征。 宽高比 可以使用宽高比#xff08;AspectRation#xff09;来描述轮廓#xff0c;例如矩形轮廓的宽高比为#xff1a; 宽高比 宽度AspectRation来描述轮廓例如矩形轮廓的宽高比为 宽高比 宽度Width/高度Height示例编写程序计算矩形轮廓的宽高比。 import cv2 o cv2.imread(cc.bmp) cv2.imshow(original,o) gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) x,y,w,h cv2.boundingRect(contours[0]) cv2.rectangle(o,(x,y),(xw,yh),(255,255,255),3) aspectRatio float(w)/hprint(aspectRatio) cv2.imshow(result,o) cv2.waitKey() cv2.destroyAllWindows()运行结果 同时程序还会显示如下的运行结果 2.1506849315068495可以看出轮廓的宽高比约为 2。 Extent用轮廓面积与矩形边界矩形包围框、矩形轮廓面积之比 可以使用轮廓面积与矩形边界矩形包围框、矩形轮廓面积之比 Extend 来描述图像及 其轮廓特征。计算方法为 示例计算图像的轮廓面积与其矩形边界面积之比。 import cv2 o cv2.imread(cc.bmp) cv2.imshow(original,o) gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) x,y,w,h cv2.boundingRect(contours[0]) cv2.drawContours(o,contours[0],-1,(0,0,255),3) cv2.rectangle(o,(x,y),(xw,yh),(255,0,0),3) #----------------计算轮廓的面积与边界矩形的面积------------------------- rectAreaw*h cntAreacv2.contourArea(contours[0])extendfloat(cntArea)/rectArea print(extend) cv2.imshow(result,o) cv2.waitKey() cv2.destroyAllWindows()同时程序还会显示如下的运行结果 0.6717127650292296可以看出本例中图像的轮廓面积与矩形边界面积的比值大约为 0.7。 Solidity轮廓面积与凸包面积之比 可以使用轮廓面积与凸包面积之比 Solidity 来衡量图像、轮廓及凸包的特征。其计算方法为 示例编写程序计算图像轮廓面积与凸包面积之比。 import cv2 o cv2.imread(hand.bmp) cv2.imshow(original,o) gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(o,contours[0],-1,(0,0,255),3) cntAreacv2.contourArea(contours[0]) hull cv2.convexHull(contours[0]) hullArea cv2.contourArea(hull) cv2.polylines(o, [hull], True, (0, 255, 0), 2) solidityfloat(cntArea)/hullArea print(solidity) cv2.imshow(result,o) cv2.waitKey() cv2.destroyAllWindows()同时程序还会显示如下的运行结果 0.6752344564084751可以看出本例中图像的轮廓面积与凸包面积的比值约为 0.7。 就是绿色的跟红色的面积之比 等效直径Equivalent Diameter 可以用等效直径来衡量轮廓的特征值该值是与轮廓面积相等的圆形的直径。其计算公式为 示例计算与轮廓面积相等的圆形的直径并绘制与该轮廓等面积的圆。 import cv2 import numpy as np o cv2.imread(cc.bmp) cv2.imshow(original,o) gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)cv2.drawContours(o,contours[0],-1,(0,0,255),3) cntAreacv2.contourArea(contours[0]) equiDiameter np.sqrt(4*cntArea/np.pi) print(equiDiameter) cv2.circle(o,(100,100),int(equiDiameter/2),(0,0,255),3) #展示等直径大小的圆 cv2.imshow(result,o) cv2.waitKey() cv2.destroyAllWindows()同时程序还会显示如下的运行结果 99.00522529212108可以看出与本例中与轮廓面积相等的圆形的直径约为 99。 方向 在 OpenCV 中函数 cv2.fitEllipse()可以用来构造最优拟合椭圆还可以在返回值内分别返回椭圆的中心点、轴长、旋转角度等信息。使用这种形式能够更直观地获取椭圆的方向等信息。 函数 cv2.fitEllipse()返回各个属性值的语法格式为 (x,y),(MA,ma),angle cv2.fitEllipse(cnt) 式中几个返回值的意义如下 (x,y)椭圆的中心点。(MA,ma)椭圆水平方向轴和垂直方向轴的长度。angle椭圆的旋转角度。 示例观察函数 cv2.fitEllipse()的不同返回值 import cv2 o cv2.imread(cc.bmp)cv2.imshow(original,o) gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)ellipse cv2.fitEllipse(contours[0]) retvalcv2.fitEllipse(contours[0]) print(单个返回值形式) print(retval\n,retval) (x,y),(MA,ma),angle cv2.fitEllipse(contours[0]) print(三个返回值形式) print((x,y)(,x,y,)) print((MA,ma)(,MA,ma,)) print(angle,angle) cv2.ellipse(o,ellipse,(0,0,255),2) cv2.imshow(result,o) cv2.waitKey() cv2.destroyAllWindows()同时程序还会显示如下的运行结果 单个返回值形式 retval ((276.2112731933594, 139.6067352294922), (63.01350021362305, 166.72308349609375), 82.60102844238281) 三个返回值形式 (x,y)( 276.2112731933594 139.6067352294922 ) (MA,ma)( 63.01350021362305 166.72308349609375 ) angle 82.60102844238281从以上运行结果可以看出函数 cv2.fitEllipse()以不同形式返回的值是相同的。 掩模和像素点 有时我们希望获取某对象的掩模图像及其对应的点。51 节介绍了将函数cv2.drawContours()的轮廓宽度参数 thickness 设置为“-1”即可获取特定对象的实心轮廓即特定对象的掩模。 另外我们可能还希望获取轮廓像素点的具体位置信息。本节介绍如何获取轮廓实心、空心的像素点位置信息。 一般情况下轮廓是图像内非零的像素点可以通过两种方式获取轮廓像素点的位置信息。 一种是使用 Numpy 函数另外一种是使用 OpenCV 函数。 1使用Numpy函数获取轮廓像素点 numpy.nonzero()函数能够找出数组内非零元素的位置但是其返回值是将行、列分别显示 的。 例如对于如下数组 a 应用函数 numpy.nonzero() a [[0 0 0 1 0] [0 0 1 0 1] [0 0 1 1 1] [1 0 0 0 0] [1 0 0 0 1]]返回的数组 a 内非零元素的位置信息为: (array([0, 1, 1, 2, 2, 2, 3, 4, 4], dtypeint64), array([3, 2, 4, 2, 3, 4, 0, 0, 4], dtypeint64)) 使用 numpy.transpose()函数处理上述返回值则得到这些点的(x, y)形式的坐标 [[0 3] [1 2] [1 4] [2 2] [2 3] [2 4] [3 0] [4 0] [4 4]] 示例:使用 Numpy 函数获取一个数组内的非零值元素的位置信息。 代码如下 import numpy as np #------------生成一个元素都是零值的数组 a------------------- anp.zeros((5,5),dtypenp.uint8) #-------随机将其中 10 个位置上的数值设置为 1------------ #---times 控制次数 #---i,j 是随机生成的行、列位置#---a[i,j]1,将随机挑选出来的位置上的值设置为 1 for times in range(10):inp.random.randint(0,5)jnp.random.randint(0,5)a[i,j]1 #-------打印数组 a观察数组 a 内值的情况----------- print(a\n,a) #------查找数组 a 内非零值的位置信息------------ locnp.transpose(np.nonzero(a)) #-----输出数组 a 内非零值的位置信息------------ print(a 内非零值的位置:\n,loc)运行上述程序会显示如下的运行结果 a [[1 1 0 0 0] [1 1 0 1 1] [1 0 0 0 0] [0 0 0 1 0] [1 1 0 0 0]] a 内非零值的位置: [[0 0] [0 1] [1 0] [1 1] [1 3] [1 4] [2 0] [3 3] [4 0] [4 1]]示例使用 Numpy 函数获取一个图像内的轮廓点位置。 import cv2 import numpy as np #-----------------读取原始图像---------------------- o cv2.imread(cc.bmp) cv2.imshow(original,o) #-----------------获取轮廓------------------------ gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cntcontours[0]#-----------------绘制空心轮廓------------------------ mask1 np.zeros(gray.shape,np.uint8) cv2.drawContours(mask1,[cnt],0,255,2) pixelpoints1 np.transpose(np.nonzero(mask1)) print(pixelpoints1.shape,pixelpoints1.shape) print(pixelpoints1\n,pixelpoints1) cv2.imshow(mask1,mask1) #-----------------绘制实心轮廓--------------------- mask2 np.zeros(gray.shape,np.uint8) cv2.drawContours(mask2,[cnt],0,255,-1) pixelpoints2 np.transpose(np.nonzero(mask2)) print(pixelpoints2.shape,pixelpoints2.shape) print(pixelpoints2\n,pixelpoints2) cv2.imshow(mask2,mask2) #-----------------释放窗口------------------------ cv2.waitKey() cv2.destroyAllWindows() 左图是图像 o。中间的是空心轮廓图像 mask1。右图是实心轮廓图像 mask2。 同时程序还会显示如下的运行结果 pixelpoints1.shape (1400, 2) pixelpoints1[[106 292][106 293][106 294]...[180 222][180 223][180 224]] pixelpoints2.shape (7892, 2) pixelpoints2[[107 293][107 294][107 295]...[179 221][179 222][179 223]]使用OpenCV函数获取轮廓点 OpenCV 提供了函数 cv2.findNonZero()用于查找非零元素的索引。该函数的语法格式为 idx cv2.findNonZero( src ) 式中 idx 为返回值表示非零元素的索引位置。需要注意的是在返回的索引中每个元素对应的是列号,行号的格式。src 为参数表示要查找非零元素的图像。 示例 使用 OpenCV 函数 cv2.findNonZero()获取一个数组内的非零值。 代码如下 import cv2 import numpy as np #------------生成一个元素都是零值的数组 a------------------- anp.zeros((5,5),dtypenp.uint8) #-------随机将其中 10 个位置上的值设置为 1------------ #---times 控制次数 #---i,j 是随机生成的行、列位置 #---a[i,j]1,将随机挑选出来的位置上的值设置为 1 for times in range(10):inp.random.randint(0,5)jnp.random.randint(0,5)a[i,j]1 #-------打印数组 a观察数组 a 内值的情况----------- print(a\n,a) #------查找数组 a 内非零值的位置信息------------ loc cv2.findNonZero(a) #-----输出数组 a 内非零值的位置信息------------ print(a 内非零值的位置:\n,loc)运行上述程序会显示如下的运行结果 a[[1 1 0 0 0][0 0 0 0 1][0 0 1 1 0][0 0 0 0 1][0 0 0 0 0]] a 内非零值的位置:[[[0 0]][[1 0]][[4 1]][[2 2]][[3 2]][[4 3]]]示例使用 OpenCV 函数 cv2.findNonZero()获取一个图像内的轮廓点的位置。 import cv2 import numpy as np #-----------------读取原始图像---------------------- o cv2.imread(cc.bmp) cv2.imshow(original,o) #-----------------获取轮廓------------------------ gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cntcontours[0] #-----------------绘制空心轮廓------------------------ mask1 np.zeros(gray.shape,np.uint8) cv2.drawContours(mask1,[cnt],0,255,2) pixelpoints1 cv2.findNonZero(mask1) print(pixelpoints1.shape,pixelpoints1.shape) print(pixelpoints1\n,pixelpoints1) cv2.imshow(mask1,mask1) #-----------------绘制实心轮廓--------------------- mask2 np.zeros(gray.shape,np.uint8) cv2.drawContours(mask2,[cnt],0,255,-1) pixelpoints2 cv2.findNonZero(mask2) print(pixelpoints2.shape,pixelpoints2.shape) print(pixelpoints2\n,pixelpoints2) cv2.imshow(mask2,mask2) #-----------------释放窗口------------------------ cv2.waitKey() cv2.destroyAllWindows()左图是原图像 o。中间的是空心轮廓图像 mask1。右图是实心轮廓图像 mask2。 同时程序还会显示如下的运行结果 pixelpoints1.shape (1400, 1, 2) pixelpoints1 [[[292 106]] [[293 106]] [[294 106]] ... [[222 180]] [[223 180]] [[224 180]]] pixelpoints2.shape (7892, 1, 2) pixelpoints2 [[[293 107]] [[294 107]] [[295 107]] ... [[221 179]] [[222 179]] [[223 179]]]最大值和最小值及它们的位置 OpenCV 提供了函数 cv2.minMaxLoc()用于在指定的对象内查找最大值、最小值及其位 置。该函数的语法格式是 min_val, max_val, min_loc, max_loc cv2.minMaxLoc(imgray,mask mask) 式中的返回值为 min_val最小值。 max_val最大值。 min_loc最小值的位置。 max_loc最大值的位置。 式中的参数如下 imgray单通道图像。 mask掩模。通过使用掩模图像可以得到掩模指定区域内的最值信息。 示例使用函数 cv2.minMaxLoc()在图像内查找掩模指定区域内的最大值、最小值及其位置。 import cv2 import numpy as np o cv2.imread(ct.png) cv2.imshow(original,o) gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cntcontours[2] #coutours[0]、coutours[1]是左侧字母 R #--------使用掩模获取感兴趣区域的最值----------------- #需要注意函数 minMaxLoc 处理的对象为灰度图像本例中处理的对象为灰度图像 gray #如果希望获取彩色图像的最值需要提取各个通道图像为每个通道独立计算最值 mask np.zeros(gray.shape,np.uint8) maskcv2.drawContours(mask,[cnt],-1,255,-1) minVal, maxVal, minLoc, maxLoc cv2.minMaxLoc(gray,mask mask) print(minVal,minVal) print(maxVal,maxVal) print(minLoc,minLoc) print(maxLoc,maxLoc) #--------使用掩模获取感兴趣区域并显示----------------- masko np.zeros(o.shape,np.uint8) maskocv2.drawContours(masko,[cnt],-1,(255,255,255),-1) loccv2.bitwise_and(o,masko) cv2.imshow(mask,loc) #显示灰度结果 #loccv2.bitwise_and(gray,mask) #cv2.imshow(mask,loc) #--------释放窗口----------------- cv2.waitKey() cv2.destroyAllWindows()示例原图 左图是图像 o。右图是掩模图像 mask。 同时程序还会显示如下的运行结果 minVal 42.0 maxVal 200.0 minLoc (87, 90) maxLoc (90, 110)平均颜色及平均灰度 OpenCV 提供了函数 cv2.mean()用于计算一个对象的平均颜色或平均灰度。该函数的语 法格式为 mean_val cv2.mean(im,mask mask) 式中的返回值为 mean_val表示返回的平均值。 式中的参数如下 im原图像。mask掩模。 示例使用函数 cv2.mean()计算一个对象的平均灰度。 import cv2 import numpy as np #--------读取并显示原始图像----------------- o cv2.imread(ct.png) cv2.imshow(original,o) #--------获取轮廓----------------- gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cntcontours[2] #coutours[0]、coutours[1]是左侧字母 R #--------使用掩模获取感兴趣区域的均值----------------- mask np.zeros(gray.shape,np.uint8) #构造 mean 所使用的掩模必须是单通道的cv2.drawContours(mask,[cnt],0,(255,255,255),-1) meanVal cv2.mean(o,mask mask) # mask 是一个区域所以必须是单通道的 print(meanVal\n,meanVal) #--------使用掩模获取感兴趣区域并显示----------------- masko np.zeros(o.shape,np.uint8) cv2.drawContours(masko,[cnt],-1,(255,255,255),-1) loccv2.bitwise_and(o,masko) cv2.imshow(mask,loc) #--------释放窗口----------------- cv2.waitKey() cv2.destroyAllWindows() 左图是图像 o。右图是获取的感兴趣区域。 同时程序还会显示如下的运行结果 meanVal (85.45594913714805, 85.45594913714805, 85.45594913714805, 0.0)从上述结果可以看出函数 cv2.mean()能够计算各个通道的均值。上述 4 个值分别是 RGB和 A 通道alpha 通道的均值。本例中RGB 三个通道的值相同所以计算出的均值也是一样的。 极点 有时我们希望获取某个对象内的极值点例如最左端、最右端、最上端、最下端的四个 点。OpenCV 提供了相应的函数来找出这些点通常的语法格式是 leftmost tuple(cnt[cnt[:,:,0].argmin()][0]) rightmost tuple(cnt[cnt[:,:,0].argmax()][0]) topmost tuple(cnt[cnt[:,:,1].argmin()][0]) bottommost tuple(cnt[cnt[:,:,1].argmax()][0])示例 计算一幅图像内的极值点。 import cv2 import numpy as np o cv2.imread(cs.bmp) #--------获取并绘制轮廓----------------- gray cv2.cvtColor(o,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY) contours, hierarchy cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) mask np.zeros(gray.shape,np.uint8) cntcontours[0] cv2.drawContours(mask,[cnt],0,255,-1) #--------计算极值----------------- leftmost tuple(cnt[cnt[:,:,0].argmin()][0]) rightmost tuple(cnt[cnt[:,:,0].argmax()][0]) topmost tuple(cnt[cnt[:,:,1].argmin()][0]) bottommost tuple(cnt[cnt[:,:,1].argmax()][0]) #--------打印极值----------------- print(leftmost,leftmost) print(rightmost,rightmost) print(topmost,topmost) print(bottommost,bottommost) #--------绘制说明文字----------------- fontcv2.FONT_HERSHEY_SIMPLEX cv2.putText(o,A,leftmost, font, 1,(0,0,255),2) cv2.putText(o,B,rightmost, font, 1,(0,0,255),2) cv2.putText(o,C,topmost, font, 1,(0,0,255),2) cv2.putText(o,D,bottommost, font, 1,(0,0,255),2) #--------绘制图像----------------- cv2.imshow(result,o) #--------释放窗口----------------- cv2.waitKey() cv2.destroyAllWindows()其中的A,B,C,D 就是该图像的极点 同时程序还会显示如下的运行结果 leftmost (202, 135) rightmost (423, 120) topmost (369, 69) bottommost (216, 179)
http://www.sczhlp.com/news/243846/

相关文章:

  • 做实体店打折信息网站wordpress免费企业主题下载
  • 茂名网站建设方案外包中国建筑网站平台有哪些
  • 衍艺 网站建设运营电商
  • 手机端网站开发素材网站制作技巧017
  • Redis key 消失之谜
  • Blazor 感觉回到了ASP时代?
  • 2025年靠谱的FFU龙骨优质厂家推荐榜单
  • 登陆国外的网站要这么做黄村网站建设公司
  • 怎么样免费创建网站跨境电商最好的平台
  • 威海建设集团招聘信息网站企业主题wordpress 含演示数据
  • 滑县网站建设哪家好安徽省工程建设信息官方网站
  • 用dedecms做的网站玉溪市网站建设推广
  • 公司做网站费用怎么记账最新章节 62.一起来做网站吧
  • 网站建设公司市场wordpress 原生中文主题
  • 网站开发项目介绍ppt昆山建设公司网站
  • 外贸自己做网站国家职业资格证书网站
  • 我的小程序怎么制作海淀区seo搜索引擎
  • 怎么看网站的建站公司是哪个手机网站做seo
  • 网站托管 域名网站制作基本规则
  • 网站建设案例讯息建筑公司起名大全2021最新版的
  • 网站建设汇报方案ppt模板购物网站设计思路
  • 贵阳网站制作费用汕头建站模板源码
  • 湖南网站备案要多少天商城公众号开发
  • 安乡网站制作2024年重大新闻简短
  • php网站视频代码怎么查找网站的服务器
  • 服务器做网站有什么好处网站规划与设计大作业
  • 温州科技网站建设头像制作免费
  • 怎样做网站链接网页素材网
  • 网络网站建设办公php做网站登陆验证
  • 黑龙江建设厅网站seo公司是什么意思