![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opencv
文章平均质量分 88
opencv
abcvincent
设计
展开
-
【opencv学习之四十六】OpenCV4.2 QR二维码识别及定位
首先系统得安装opencv4以上的库,代码实验了一下,相比zxing和zbar,更简洁一些,并且提供了二维码定位;代码如下:#include <iostream>#include <opencv2/opencv.hpp>#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgu...原创 2020-02-01 19:55:55 · 3557 阅读 · 1 评论 -
【opencv学习之四十五】Ubuntu16安装OpenCV4.2
首先Ubuntu16是安装在虚拟机里,准备安装的是OpenCV4.2;步骤如下:1)首先去GitHub下载OpenCV4.2.0,和对应的opencv_contrib4.2.0;地址:https://github.com/opencv; 参考官方安装教程:https://docs.opencv.org/4.2.0/d7/d9f/tutorial_linux_install.html...原创 2020-01-09 21:23:31 · 4592 阅读 · 2 评论 -
【opencv学习之三十二】轮廓查找并统计2
关于opencv在图像中查找轮廓并统计的方法基本这样几个步骤:1、读取图像——2、前期处理滤波平滑等——3、分割图像,一般阈值分割——4、FindContours查找轮廓——5、统计轮廓——6、根据连通域面积大小过滤轮廓——7、染色需要显示的轮廓——8、显示图像;上个数米的程序例子是用opencv2写的,很多方法都带cv前缀,下面用opencv3进行轮廓查找并统计:void imgCont原创 2018-02-06 21:05:15 · 1341 阅读 · 0 评论 -
【opencv学习之三十七】图像的矩及矩的匹配
图像的矩是归一化的灰度级图像的二维随机变量的概率密度,是一个统计学特征。OpenCV中实现了这个矩的算子是Moments();其中分为零阶矩M00、一阶矩M10和M01、二阶矩M20,M02和M11;其中当图像为二值图时,M00是图像面积(白色区域)的总和,或者说连通域的面积;而这时M10和M01是图像白色区域上x和y坐标值的累计,所以图像的的重心(Xc,Yc)可以由:Xc=M10/M00;Yc=...原创 2018-02-11 20:36:43 · 4295 阅读 · 0 评论 -
【opencv学习之三十一】轮廓查找并统计 数米实例
opencv有几个经典实例,其中一个关于轮廓查找并统计的实例,数米粒的实验代码,这里简单贴出来:/****************************************************************************************\* 25 查找并计算米粒的数量原创 2018-02-05 23:01:59 · 2691 阅读 · 0 评论 -
【opencv学习之二十九】彩色分割
图像的色彩分割其实原理差不多,也是根据图像的rgb色彩组成,设置分割区间来将颜色分开来;比如Scalar(100,100,100)-Scalar(150,150,150)间的色彩分割出来;但是rgb颜色分割时候,rgb值往往不是连续性的,比如下面:淡蓝色深蓝色啊中间并不递增分布的,所以用rgb彩色分割效果一般,一般采用HSV等方法分割;代码示例rgb分割:int img_B,i原创 2018-02-05 00:21:04 · 6463 阅读 · 2 评论 -
【opencv学习之二十四】OpenCV滤波处理对比
OpenCV的邻域滤波处理函数主要都通图像的卷积操作,有1方框滤波boxFilter(),属于线性滤波,其原理是用一个矩阵和一个核矩阵卷积操作;2均值滤波blur(),也属于线性滤波,是方框滤波一种归一化后的方框滤波;3高斯滤波GaussianBlur(),属于线性滤波,其原理类似均值滤波,但是滤波经过加权处理,加权值符合正态分布,处理效果比均值更好一些;4中值滤波medianBl原创 2018-01-07 21:50:11 · 3600 阅读 · 0 评论 -
【opencv学习之二十八】直方图补充及直方图匹配
之前有写过直方图,这里补充一些实验代码和总结,另外补充直方图匹配的代码;分通道计算和绘制直方图:void imgHistogram()//直方图-一维灰度直方图{ ///一维灰度直方图 //1.计算直方图 Mat srcImg = imread("D:/2.jpg"); // Mat srcImg = imread("D:/ImageTest/p原创 2018-02-01 00:10:17 · 428 阅读 · 0 评论 -
【opencv学习之二十七】Hough霍夫变换寻找直线和圆
霍夫变换是在图像中寻找直线、圆和其他一些简单形状的方法。霍夫变换有一个很重要的性质就是对图形在图像中残缺、噪声等不敏感,有较强抗干扰性;但其也有缺点,比如要检测的目标曲线要提前定义好,而如果曲线参数过多则计算量呈指数增长;理论上霍夫检测任意预定目标;opencv实现了其部分算法;Hough变换有很长的研究历史,同样也有很多的文献和资料;Hough基本思想是边缘信息A进行f(x)的拟合操作,通过计算原创 2018-01-31 23:44:41 · 823 阅读 · 0 评论 -
【opencv学习之二十六】边缘检测算子:Canny,Sobel,Laplacian
opencv实现了一些边缘检测算法的函数,定型的是Canny(),Sobel(),Laplacian();边缘算子在图像识别及检测中是一个很重要的方法,在人类识别物体时也多依赖边缘轮廓,因为在一般情况下边缘特征不受光照影响;同样图像只剩边缘后像素量也会极大减少,这样对于处理是有益的。至于算子的算法和原理大家可以找专业资料研读一下,大部分根据图像梯度特征来寻找边缘;话不多说,下面看代码:原创 2018-01-24 21:54:20 · 568 阅读 · 0 评论 -
【opencv学习之二十五】OpenCV腐蚀、膨胀、开闭运算、形态学梯度、顶帽、黑帽
opencv有一些基本的形态学运算,对图像做初步处理,用来突出需要分割或进一步处理的图像;算子具体的原理就不做解释了,直接上代码看应用场景,代码里有注解:void imgMorph()//图像形态学操作{ Mat srcImg = imread("D:/ImageTest/Rice.png"); Mat dstImg1,dstImg2,dstImg3,dstImg4,dstI原创 2018-01-14 11:27:01 · 1199 阅读 · 0 评论 -
【opencv学习之三十三】轮廓特征应用:凸包
凸包这个概念学术上讲的比较深,通俗简单来说(当然不太准确)就是轮廓最外侧点的连线形成的区域结果,例如下面样子:外面红色轮廓就是凸包的结果:贴一下简单用于的代码:void imgConvex()//25.轮廓凸包{ Mat img=imread("D:/ImageTest/convex.png");//加载图片 Mat dst; cv::cvtColor原创 2018-02-06 21:27:16 · 1194 阅读 · 0 评论 -
【opencv学习之三十四】轮廓特征应用:最小外接矩形和圆
opencv轮廓特征中有外接矩形和圆,其中外接矩形又分为平行窗口矩形和不平行窗口矩形;外接圆也分为正圆和椭圆两种;基本调用方法类似,都是contours中的一个属性,调用就可获取最小特征参数;话不多说直接代码:最小外接矩形:void imgminRect()//轮廓最小外接矩形{ Mat img=imread("D:/ImageTest/convex.png");//加载图片原创 2018-02-06 23:06:21 · 4768 阅读 · 0 评论 -
【opencv学习之三十五】轮廓特征应用:按轮廓剪切图像ROI
将轮廓剪切出来然后单独保存到一个文件夹里,基本方法是通过轮廓最小外接矩形来对图像进行ROI剪切操作,然后将剪切后的图像保存到文件夹里,循环此操作直到轮廓遍历完成;下面实现代码:void imgContoursROI()//轮廓roi{ //1.查找轮廓的预处理 Mat srcImg = imread("D:/ImageTest/convex.png"); Mat co原创 2018-02-06 23:20:36 · 6930 阅读 · 5 评论 -
【opencv学习之四十四】图像放缩与金字塔
在opencv中图像有时候过大导致进行操作时候信息量过大,耗时较长,一般可以将图像压缩,然后根据进行初步信息搜索,减少搜索范围,然后定位可能搜索区域进行再次分析。opencv有对图像进行放大(向上采样)和缩小(向下采样)两个函数PyrUp()和PyrDown(),可以直接操作。当然放大与缩小图像也有resize()函数,不过resize()的实现方式主要是各种插值法,而PyrUp和PyrDown用...原创 2018-09-09 15:17:17 · 627 阅读 · 0 评论 -
【opencv学习之四十三】K均值聚类算法
K均值聚类算法,在opencv中通过kmeans()函数实现;k均值通俗讲:就是从一堆样本中,随便挑出几个,比如3个吧,然后用样本中的和这挑出来的比较,比较后排序,谁和挑出的那个接近就把他划到那个类里,比如样A和挑1、挑2、挑3中,挑2最接近,则把样A划到挑2里,当然还没完事,还得再对挑完的3个类群,确定一个类群代表——“均值”,然后以这3个新的代表——“均值”再次与样本对比,直到“均值”不在变了...原创 2018-04-14 21:40:34 · 3073 阅读 · 2 评论 -
【opencv学习之四十二】简单运动检测
视频运动检测基本思想是进行每一帧对比,检测不同然后得出是否运动,一般分为两种,背景法和差帧法;背景法是:将一幅图作为背景,让后和每一帧对比;缺点是一开始存入的背景可能随光照变法而造成错误,但是可以用在光照环境稳定的地方,优点是可以检测之前背景没有的景象;差帧法是:将前一帧和后一帧进行对比;缺点是无法对运动后突然又静止的景象进行识别,优点是光照不影响;实例背景法://////////////////...原创 2018-02-22 20:55:49 · 1612 阅读 · 0 评论 -
【opencv学习之四十一】SIFT和SUFT算法
SIFT和SUFT算法是有相关专利的,所以在opencv中属于"nonfree"里的,在opencv2.x.x版本可能还有保留,但是在opencv3.x.x后就没有了,需要单独下载opencv_contrib库,然后自己Cmake;相关算法的详解这里不做过多解释了,推举两个大神博客:1.小魏的修行的博客:http://blog.csdn.net/xiaowei_cqu/article/detail...原创 2018-02-21 22:22:58 · 9956 阅读 · 0 评论 -
【opencv学习之四十】角点检测
图像的角点通常被定义为两条边的交点,或者灰度值急剧变化的点;角点作为图像上的特征点,在很多图像识别等应用具有很好特征识别性;openCV实现的角点算法主要有:cornerHarris(),goodFeaturesToTrack(Shi-Tomasi)和cornerSubPix();其中cornerHarris()角点检测是一种直接基于灰度值的角点提取算法,其原理是通过对每一个像素(x,y)在blo...原创 2018-02-21 19:33:20 · 423 阅读 · 0 评论 -
【opencv学习之三十九】背景分割和漫水填充
openCV中实现了背景分割算法——grabCut()和漫水填充算法——floodFill();其中GrabCut算法是调用仅需要确认前景和背景输入,该算法就可以完成前景和背景的相对最优的分割;该算法利用了图像中的纹理信息和边界反差信息,来进行分割,和分水岭算法比较类似,但是速度挺慢的,结果好于分水岭;floodFill漫水填充算法比较常见,图画中的填充色用的就是这个算法;原理也比较简单就是遍历封...原创 2018-02-21 18:28:26 · 1725 阅读 · 0 评论 -
【opencv学习之三十八】图像的分水岭算法
分水岭算法主要根据图像梯度将图像分割成“山”和“谷”;一般图像噪声经常干扰分水岭算法的分割,所以一般采用标记的方法来给分水岭算法提供灰度级参考,来更换的分割图像;从效果来说比普通的灰度阈值分割效果要好;算法的具体原理和实现可参考网上的详解;原函数及解释:CV_EXPORTS_W void watershed( InputArray image, InputOutputArray markers )...原创 2018-02-21 11:52:37 · 940 阅读 · 0 评论 -
【opencv学习之三十】简单模板匹配matchTemplate
opencv实现了一部分通过模板与目标图像进行寻找最佳匹配的方面matchTemplat();这个方法网上有很多讲解,基本思想是将模板图像在目标图像上滑动逐一对比,通过统计的基本方法进行匹配,比如方差检验,相关性检验等方法来寻找最佳匹配;话不多多说吧,从网上找到的一些实验代码,实验了一下:1简单匹配代码://模板匹配,简单的寻找拷贝图,效果一般void ImgMatch()//图像匹配{ ...原创 2018-02-05 22:42:18 · 6118 阅读 · 0 评论 -
【opencv学习之三十六】轮廓特征应用:计算点与轮廓距离
opencv实现了Contours与point的距离关系的计算使用起来很方便,不用自己再进行坐标转换计算了;示例代码如下:void imgContoursPoint()//26轮廓与点的距离计算{ //1.查找轮廓前的预处理 Mat srcImg = imread("D:/ImageTest/11.png"); Mat copyImg = srcImg.clone()原创 2018-02-06 23:32:46 · 5680 阅读 · 0 评论 -
【opencv学习之二十三】OpenCV图像几何变换
图像的几何变换是基本但是也是常用到的一些操作,下面简单做一下总结:1.放缩图像resize()函数: //图像缩放(resize函数) Mat srcImg = imread("D:/2.jpg"); Mat dstImg; resize(srcImg,dstImg,Size(),0.5,0.5);//将原图像宽高缩放为0.5. // resize原创 2017-12-28 20:39:21 · 1699 阅读 · 1 评论 -
【opencv学习之十八】基本绘图工具line circle rectangle ellipse等
这里介绍opencv基本绘图工具,包括直线line(),圆形circle(),矩形recangle(),椭圆ellipse(),多边形fillPoly(),添加文字putText()等,然后后面还有opencv鼠标操作的一些方法,详见示例代码:1.基本绘图工具:void drawTool()//1.基本绘图工具{ Mat img(600, 600, CV_8UC3, Sca原创 2017-12-02 20:17:07 · 1088 阅读 · 0 评论 -
【opencv学习之九】opencv3.2配置opencv_contrib方法
opencv在3.0版本后sift等一些非免费开源的方法和函数被放到到了opencv_contrib库里,所以直接用opencv调用sift相关函数是无法加载的,需要自己Cmake源代码生成包含opencv_contrib的库;首先准备如下:1、下载vs2015,链接:https://pan.baidu.com/s/1c28f8ze,提取码:52dj;秘钥在网上找,然后安装;2、下载q原创 2017-09-08 21:22:37 · 3471 阅读 · 1 评论 -
【opencv学习之十】opencv3和opencv2读取本地摄像头
opencv3和opencv2读取摄像头的代码方法不能共用,所以这里总结一下;变化是opencv2是用IplImage指针读取存储摄像头的帧,opencv3是用Mat;opencv2摄像头读取代码(Qt工程)如下:原创 2017-09-13 19:38:44 · 3260 阅读 · 1 评论 -
【opencv学习之八】Qt+Opencv制作类似halcon图片查看功能
Qt+Opencv联合图片查看器,源代码分享原创 2017-08-05 21:45:50 · 2373 阅读 · 1 评论 -
【opencv学习之六】opencv+Qt+Qzxing调取本地摄像头识别二维码
之前一直想用Qt+Qzxing组合实现电脑摄像头实时读取二维码,但是无法实现,因为不知道如何获取Qt的capture的帧,只好求之于opencv了,代码和前面两节基本相同就是加入了Qzxing。Qzxing的下载:https://github.com/ftylitak/qzxing;下载好是源码包,把其放在Qt编译下的debug文件中即可,或者将路径加在pro文件里,配置很简单。下面是原创 2017-03-16 23:47:43 · 3378 阅读 · 1 评论 -
【opencv学习之五】opencv调用摄像头用Qt的UI显示
当用到opencv与Qt结合时候,需要用Qt的UI显示opencv的结果或者效果,所以以下做了简单的Qt的UI。在这之前用Qt的capture总是找不到如何获取摄像头的帧,但是opencv的方法很简单就可以获取摄像的帧,方便实时处理图像信息。以下是代码:mianwindow.h代码:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include原创 2017-03-16 23:02:31 · 8083 阅读 · 6 评论 -
【opencv学习之四】opencv调取本地摄像头
从博客上看到opencv如何调取摄像头,例程代码跑了一下,效果可以,下面是代码,Qt配置opencv和之前介绍的一样,pro中添加opencv路径,include时候包含头文件名字就OK。我是加在mainWindow下调用的,只要调用就可以,下面是代码:#include "mainwindow.h"#include "ui_mainwindow.h"#include "cv.h"#i原创 2017-03-16 20:57:11 · 5482 阅读 · 2 评论 -
【opencv学习之七】配置Opencv3.2.0+Qt5.8.0开发环境
配置时候折腾了一阵,后来配置成功,而且非常简单,下面具体:1.确定自己电脑系统是win7及以上的(64位,因为Opencv3.2.0只支持64位且vc14以上编译dll);网上有很多cmake的方法,建议不要用,简直是自虐,已经有dll了,而且环境匹配,没必要把源码再编译一遍,编译不对到处是bug,整死人,纯粹是不想让初学者好好学学习;原创 2017-03-30 21:18:06 · 8078 阅读 · 7 评论 -
【opencv学习之三】opencv与qt图像格式交换调试问题和补充(IplImage-->QImage)
opencv与qt联合编程时候,需要将opencv的图片传给qt使得其能在qt的UI里显示出来并操作是,上一节已经说过了,不过如果是彩色3通道的可以直接显示,没有什么问题,但是opencv处理后再床给qt就会出现图片乱码的,寻找解决办法如下:原创 2016-09-05 15:13:52 · 1135 阅读 · 0 评论 -
Opencv与QT结合编程显示图像
Opencv与QT结合编程显示图像首先QT的工程文件添加代码:(路径中不能有空格,QT不能解析)INCLUDEPATH += C:\OpenCV\cv\include \C:\OpenCV\cvaux\include \C:\OpenCV\cxcore\include \C:\OpenCV\otherlibs\highguiLIBS += C:\Op转载 2016-04-10 10:09:55 · 3204 阅读 · 0 评论 -
【opencv学习之一】配置QT+opencv环境简单方法
pencv库搞了很久,都没能和qt联合编程,不是这有错误就哪里有问题,网上有很多办法,搜索到的都不好用,什么cmake啊,什么直接链接lib啊,试了都没成功,差点放弃了,不过后来还是成功了,非常EZ,如下:原创 2016-04-14 20:45:47 · 5094 阅读 · 0 评论 -
【opencv学习之十一】opencv: HighGUI参考手册
内容收集于网络:对opencv内置ui函数的解释,对HighGUI各个函数的详细解释HighGUI概述HighGUI概述简单图形界面cvNamedWindow创建窗口int cvNamedWindow( const char* name, int flags );name窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。flags窗口属性标志。目前唯一支持的标志是CV_WINDOW_AUTOS原创 2017-09-17 12:34:47 · 864 阅读 · 0 评论 -
【opencv学习之十三】opencv阈值分割threshold函数
什么是阈值?(以下摘自www.opencv.org.cn学习网站)最简单的图像分割的方法。应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。(注意:原创 2017-09-24 20:44:35 · 4480 阅读 · 0 评论 -
【opencv学习之二十二】Threshold阈值分割进阶adaptiveThreshold
普通的Threshold分割只是简单是或否的进行定值分割,很多时候需要分割的图像存在梯度效果,一刀切的效果很不理想;而opencv的adptiveThreshold则融合了考虑周边邻域的情况而进行的图像分割处理。另外做不做滤波处理等对图像分割影响也比较大。1.adptiveThreshold分割,实验源码: Mat img=imread("D:/ImageTest/sudoku.pn原创 2017-12-16 21:43:57 · 6354 阅读 · 0 评论 -
【opencv学习之二十一】ROI和mask
ROI是选择感兴趣的区域并截取保存在内存中,一般俗称抠图;mask是掩码或者掩膜,掩码的位置如果为0,则在这个位置上不做修改;如果不为0,则做与运算;直接看源码1.简单融合//初级融合(定义图像中的ROI,将logo拷贝到ROI) Mat img = imread("D:/2.jpg",CV_LOAD_IMAGE_COLOR);//读入原始图片 Mat logo =原创 2017-12-16 21:20:20 · 4127 阅读 · 0 评论 -
【opencv学习之二十】图像基本运算
opencv的图像基本运算加减乘除与或非等操作,直接代码了:原创 2017-12-02 21:18:27 · 595 阅读 · 0 评论