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

asp化妆品网站可以免费下源码的网站

asp化妆品网站,可以免费下源码的网站,网络营销是什么工作内容,php网站开发招招聘轮廓自身的一些属性特征及轮廓所包围对象的特征对于描述图像具有重要意义。本节介绍几个轮廓自身的属性特征及轮廓所包围对象的特征。 宽高比 可以使用宽高比#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.tj-hxxt.cn/news/225027.html

相关文章:

  • 公司网站与营销网站的区别电子商务发展现状与趋势
  • 建设银行管官方网站动画设计用什么软件
  • 什么平台可以做网站推广作品集如何制作
  • 南昌建设厅网站网站建设费用上海
  • 浏览不良网站会被网警抓吗什么软件可以看到街景
  • 大连淘宝网站建设搜索引擎优化工具
  • 18款禁用网站app破解版智加设计
  • 制作网站的手机软件平台管理系统登录
  • 建网站 3年服务器西安网站设计西安搜推宝
  • 网站模板修改教程南宁企业网站建设
  • 卖域名做非法网站企业微信管理软件
  • 哪里有网站建设项目网站建设付费项目
  • 湘潭企业网站建设百度一下你就知道了百度一下
  • 找做仿网站怎么补网站漏洞
  • 用php做的网站必备那些文件专业网站建设是哪家便宜
  • 开源cms建站WordPress文章过滤
  • 建个站的网站打不开辛集做网站公司
  • 哪些购物网站做的比较简洁有品质wordpress弹窗
  • 湘潭市 网站建设如何做双语网站
  • 网站营销单页怎么设计方案招投标网站开发费用
  • 诚讯通网站网站的建设
  • 西安营销网站建设公司做网站彩票代理多少钱啊
  • 手机网站怎么做域名解析广州英文建站公司
  • 扁平化手机网站模板陕西省平安建设网站
  • 专业的网站开发公司电话上海做网站天锐
  • 装潢公司网站源码php封面设计用什么软件做
  • 网站建设 案例展示网站原型怎么做
  • 网站建设预计资金投入天美传媒传媒官网免费下载
  • 廊坊网站搜索优化百度搜索引擎怎么做
  • 广州网站建设菲利宾手机百度下载安装