OpenCV入门学习基础教程(从小白变大神)
Opencv是用于快速处理图像处理、计算机视觉问题的工具,支持多种语言进行开发如c++、python、java等,下面这篇文章主要给大家介绍了关于openCV入门学习基础教程的相关资料,需要的朋友可以参考下
【关注博主,持续分享编程干货~】 一、Canny边缘检测
该边缘检测法步骤如下:使用高斯滤波器,以平滑图像,滤除噪声。计算图像中每个像素点的梯度强度和方向。应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。通过抑制孤立的弱边缘最终完成边缘检测。
高斯滤波
我们要进行边缘检测过程中肯定要进行梯度计算,计算梯度时那些噪音点也会影响梯度的变化,因此进行去噪。
梯度和方向
使用sobel算子,进行梯度大小和方向的计算。
非极大值抑制 NMS
算完梯度后,有些可能大点,有些可能小点,在一个核中,把一些小的梯度值抑制掉,只保留大的,即明显的。
如人脸识别,能够把脸框起来(有多个框框到脸了,只保留最好的。)
法1:
蓝线表示方向,dTmp1和dTmp2都是亚像素点,g1g2g3g4都是知道的,可求dTmp1和dTmp2。 在c比dTmp1和dTmp2都大的情况下,保留c,否则就被抑制掉了。
法2:
比如我们选择倾斜45°,就过了g1和g4了(上上图),就不用插值了。当前方向离哪个角度近就用选择哪个。
右图中如果A比BC都大,那么A就保存下来了。
双阈值
对一些所有可能边界进行过滤,只保留最真实的。
A点大于maxVal 就是边界 如果有小于minVale的,那就省略掉。
他俩之间的B C分别进行讨论,如果c和边界是连着的,就保留。B没连着,舍弃。
v1=cv2.Canny(img,80,150)
80 150为下上阈值,一定范围内,下阈值越小,上阈值越小越容易被当作边缘。| img=cv2.imread ("./data/gd06.jpg",cv2.IMREAD _GRAYSCALE)| v1=cv2.Canny(img,80,150)| v2=cv2.Canny(img,50,100)| res = np.hstack ((v1,v2))| cv_show("res",res)
| img =cv2.imread("./data/gd05.jpg ",cv2.IMREAD_GRAYSCALE )| v1=cv2.Canny(img,120,250)| v2=cv2.Canny(img,50,100)| res = np.hstack ((v1,v2))| cv_show("res",res)
二、 图像轮廓
上面说的是边缘,随便一个线段也能被检测成边缘。而轮廓是一个整体,正常是封闭的连在一起的。2.1 轮廓收集
cv2.findContours(img,mode,method)RETR_EXTERNAL :只检索最外面的轮廓;RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次;(常用,推荐)
method:轮廓逼近方法CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。
上图就是两种method,一个是整个框,一个是点,都能起到定位作用。
为了更高的准确率,我们选择使用二值图像:| img = cv2.imread("contours.png ")| gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)| ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 127为分割阈值 ,超过的部分取255| cv_show("thresh",thresh )
这里用到了cv2.threshold 是上一篇文章学的。
| # contours 轮廓信息 hierarchy层级 | contours, hierarchy = cv2.findContours (thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
其返回值有两个:轮廓的信息:比如上面5个图案,10个边缘(内边缘外边缘),这10个边缘信息保存在了contours元组里。层级:hierarchy 暂时用不上,用到了再说。
2.2 轮廓绘制
res = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
参数为:图像,轮廓,轮廓索引(-1默认所有),颜色模式(BGR),线条厚度(不宜太大)| img = cv2.imread("contours.png ")| gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)| ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 127为分割阈值,超过的部分取255 | | # contours轮廓信息 hierarchy层级 | contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)| | #传入 图像,轮廓,轮廓索引(-1默认所有 ),颜色模式(BGR),线条厚度(不宜太大) | # 注意需要copy ,不然原图会变…| draw_img = img.copy()| res = cv2.drawContours(draw_img , contours, -1, (0, 0, 255), 2)| cv_show("res",res)
仔细看它把10个(内外)轮廓都画出来了,这与我们传入的参数 -1 有关。
当然我们也可以选择其中某个:| draw_img = img.copy ()| # 三角的外轮廓 | res = cv2.drawContours(draw_img, contours , 0, (0, 0, 255), 2)| cv_show("res",res)
| draw_img = img.copy()| # 三角的内轮廓 | res = cv2.drawContours(draw_img, contours, 1, (0, 0, 255), 2)| cv_show ("res",res)
| draw_img = img.copy()| # 六边形外轮廓 | res = cv2.drawContours(draw_img, contours, 2, (0, 0, 255), 2) | cv_show("res",res)
2.3 轮廓特征
这里就介绍个周长和面积吧,后面用到别的再说。| cnt = contours[0] # 第0个 轮廓 三角的外轮廓| #周长 ,True表示轮廓是闭合 的| cv2.arcLength(cnt,True) # 8500.5| #面积 | cv2.contourArea (cnt) # 437.9482651948929
2.4 轮廓近似
什么是轮廓近似呢,比如下图左侧图案很麻烦,我们可以把它近似看成右边的,就是轮廓近似。
这个的原理其实也很简单,我发挥我的绘画功能给你们展示一下:
把曲线AB近似成直线AB,至于要d= threshold)| for pt in zip(*loc[::-1]): # *号表示可选参数| bottom_right = (pt[0] + w, pt[1] + h) | cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 2) | cv2.imshow("img_rgb", img_rgb)| cv2.waitKey (0)
匹配金币:
总结
【文章源于网络】
到此这篇关于openCV入门学习基础教程的文章就介绍到这了,更多相关openCV第三篇内容请关注博主以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
这款以网易为代表的经典游戏,16年来首次开启新服务时隔16年,星战前夜晨曦(后称夏娃之旅)居然开新衣了。EVE作为一个2003年上线,2006年进入中国的老IP,内容复杂,节奏缓慢,死亡成本高,难以适应当下快节奏的市场环境。没想到
真实诞于虚拟黑夜预告曙光上官婉儿王者荣耀上官婉儿定位是个法师刺客,选边的话只能中路,出装的话主要就是出爆发秒人装,因为上官婉儿技能机制的问题,出完装备后大招切后排就完事了,但是没有解控技能,非常怕硬控,所以一般都
总共也没几行,但是这种对手游的叙事,已经彻底打破了我的防线以网易为代表的手游有很多,但光遇可能是最有常识的一款。因为它选择的路线看似最小,最有艺术感,却总能一次次走出圈子。并且自2019年上线以来,光遇畅销榜始终重回前十甚至前三。近日,t
阴虚又阳虚怕冷又怕热,教你两招补阴又补阳大家好,我是刘医生。肾阴虚和肾阳虚大家都知道。但是经常会有人问我既有肾阴虚的症状也有肾阳虚的症状,这是为什么呢?今天刘医生就一次给大家讲清楚,并教你如何调理。抛开这个问题不谈,我们
刚开始就结束了,都是肾气不足惹的祸没有一个男性朋友希望自己能力不足,早早了事,都希望自己的能力强,能够满足妻子,但是出现了这种情况也不用太过惊慌,我们中医对症治疗,也是可以调理恢复的前段时间有位患者34岁,本正是身
秋季喝茶有忌讳?行家提醒记住3喝2不喝,健康过秋时间过得很快,一眨眼现在都农历八月了,已是秋天的第二个月,现在秋天的特征也越来越明显。迈入秋天后,除了温度会降低外,空气也会更加干燥,多饮茶可以帮我们改善。不过,饮茶也有忌讳,行家
想要保护牙齿,延长寿命?专家提出四少吃,四常吃食物清单都说经常吃糖容易导致蛀牙,其实吃糖并不是造成牙齿龋坏的真正原因!今天就教大家护齿的四少吃,四常吃。吃这些食物一定要注意!1淀粉类食物含有淀粉的食物,容易在口腔内分解成糖,而这些糖容
早上做好这五件事,对你的身体有极大的帮助你是不是都以为早起只是一个极为普通的动作,但其实早晨是阳气生发的时刻,而且也是养生保健的黄金期,传统的养生观念非常重视早上起床后的养生,天人合一守时是传统养生观的一大特色。早晨起来
糖尿病患者吃西瓜,升血糖还是降血糖呢?建议了解一下,可别吃错随着社会的不断发展,人们的物质生活越来越丰富,基本是到了想吃什么有什么的地步。虽然这种情况让我们感到了生活的幸福,但同时也增加了一些富贵病的几率,像是高血糖就是一种,这种疾病已经不
阶段性地调整养生计划一直以来都非常注重保养和养生,在生完宝宝之后身体也在有条不紊地恢复,当然这期间需要花很多的功夫精力和人民币。上周突然有一天在跑步的时候,感觉心脏非常不舒服。闷闷的,呼吸很费劲,甚至
多喝水毁了肾,粗茶淡饭伤透肝4个你认为健康的生活方式是错的可乐里泡姜片奶茶中加燕窝桃胶奶茶里面放中药以上的行为,其实都是在假养生。根据新华网发布的Z世代营养消费趋势报告显示,年轻人俨然是新一代健康养生消费主流,1835岁阶段占市场规模的8