
OpenCV
文章平均质量分 79
currywhm
用心做技术。一起讨论相互学习
展开
-
指针式仪表识别(二)基于轮廓的倾斜仪表校正
本文将介绍如何利用OpenCV,提取图片中的矩形轮廓特征并进行图片的倾斜校正。完成demo程序可以至:基于轮廓的倾斜仪表校正本demo所处理的图片是一张仪表(如下图),欲实现的功能是将图片中倾斜的PCB校正为水平。基本的思路是检测PCB的边缘直线,而后根据边缘直线的斜率旋转图片。但是由于仪表上存在指针,所以图片在经过轮廓提取直线检测后,会误检出很多条直线。demo程序中主要的算法就是从含有噪声...原创 2018-12-19 10:44:40 · 7045 阅读 · 7 评论 -
Opencv学习笔记(二十三) 改进边缘检测算子-----Marr-Hildresh
Marr-Hildresh边缘检测算子,用于解决边缘检测的核心问题---定位精度和抑制噪声。Marr-Hildreth算子以高斯函数为平滑算子,结合拉普拉斯算子提取二阶导数的零交叉理论进行边缘检测。边缘检测中灰度变化与图像尺寸无关,检测算子可为不同尺度,灰度变化梯度在一阶导数的极值点(波峰或波谷),或在二阶导数为零的交叉点。由于噪声点对边缘检测有一定的影响,所以效果更好的边缘检测器是LoG算子原创 2017-10-17 18:33:03 · 1569 阅读 · 0 评论 -
opencv2.4.13配置VS2015(永久配置)
opencv2.4.13配置VS2015,永久配置。VS2015和opencv2.4.13的下载地址:https://msdn.itellyou.cn/首先设置系统环境变量:32位和64位都添加上,如果你只配置了一个版本的opencv,尽量配置为32位,安全,错误少。设置好系统变量后,打开VS2015,新建一个控制台应用程序,然后在源文件中添加新建项原创 2017-10-08 18:00:18 · 11687 阅读 · 1 评论 -
视频前景目标提取(一)
最近几天参加了一次比赛,提取监控视频前景目标,前前后后试了很多的方法,帧差法+GMM,四帧差法,改进帧差法,混合高斯模型,改进的混合高斯模型,ViBe前景目标提取,ViBe+GMM前景目标提取等等。最后也尝试了模板匹配和HOG+SVM训练样本图片提取视频目标。大概会用几篇文章介绍一下这些方法的优缺点和各自的适用情况。编程实现均在opencv2.4.13+VS2015环境。 首先介绍一下帧原创 2017-09-20 19:33:00 · 10323 阅读 · 4 评论 -
ViBe提取视频前景目标
ViBe算法:ViBe - a powerful technique for background detection and subtraction in video sequences算法官网:http://www2.ulg.ac.be/telecom/research/vibe/描述:ViBe是一种像素级视频背景建模或前景检测的算法,效果优于所熟知的几种算法,对硬件内存占用也少。原创 2017-09-17 22:20:14 · 3073 阅读 · 0 评论 -
Qt+opencv二值化
我用的是Qt5.6.0+opencv3.2,套件是MinGW,关于在Qt中如何配置的问题,可以参考这篇文章,http://blog.youkuaiyun.com/gufeiyunshi/article/details/50967440打开图像做个二值化处理,以证明配置没有问题。在ui界面放一个label和一个pushButton,比较喜欢使用Qt做界面开发,它融合了C#和C++两种语言的好处。原创 2017-09-24 08:49:27 · 2382 阅读 · 0 评论 -
OpenCV学习笔记十九---运动跟踪 CamShift以及meanShift详解
CamShift跟踪器:RotatedRect CamShift(InputArray probImage, Rect& window, TermCriteria criteria)probImage – 对象直方图的反投影. 详细见函数 calcBackProject() .window – 初始搜索窗口criteria – meanShift 停止迭代搜索标准.原创 2017-03-06 20:08:16 · 2597 阅读 · 0 评论 -
OpenCV学习笔记(二十一)---三通道和四通道之间的区别
三通道和四通道之间的区别:void mixChannels(const vector& src, vector& dst, const int* fromTo, int npairs)src –矩阵的输入数组或向量。所有矩阵必须具有相同的大小和相同的深度。nsrc –src中的矩阵数。dst –输出数组或矩阵向量。所有矩阵必须分配。它们的大小和深度必须与src [0]一致。原创 2017-03-09 13:49:42 · 7671 阅读 · 0 评论 -
Opencv学习笔记(二十)--读取视频帧的几种方法
1、第一种方法#include "opencv2/opencv.hpp"using namespace cv;int main(int, char**){ VideoCapture cap("E:\\图片\\视频材料\\AVSEQ01.avi");// open the default camera if(!cap.isOpened()) // check if we succe转载 2017-03-09 09:19:44 · 17165 阅读 · 0 评论 -
摄像头和视频的读取和写入
总结一下视频的读取和写入,opencv1+和opencv2+以后的版本都总结一下。先总结一下opencv1+的用法,现在使用的opencv都是2.0以后了,不过1.0版本是使用指针,用起来确实感觉很爽,简单实用。有人不喜欢1.0+的释放控件,我觉得这是个好习惯。视频读入:int main(int argc,char* argv[] ){ //argv[1] input video原创 2017-09-21 14:35:24 · 1187 阅读 · 0 评论 -
Opencv学习笔记(二十二) 凸包检测
凸包检测:凸包可以想象成一条刚好包住所有点的橡皮圈,对于二维的图像,凸包就是将最外层的点连接起来构成凸多边形,它能包含点集中所有的点。物体的凸包检测常常用于物体识别、手势识别及边界检测等领域。OpenCV提供了函数convexHull()用于对物体轮廓凸包进行检测,对形状凸包缺陷分析时使用convexityDefects()函数,每个缺陷区包含四个特征量:起始点,结束点,距离及最远点。原创 2017-10-08 19:08:29 · 8993 阅读 · 0 评论 -
Qt做一个卡通摄像头
在这篇文章的基础上,做视觉卡通处理:Qt打开USB摄像头,做圆检测先在painting.h中添加一个函数,painting.hprivate slots: void colorpainting(Mat image,Mat& result);在painting.cpp中添加一下程序:#include "painting.h"#include "ui_painti原创 2017-10-19 09:44:34 · 573 阅读 · 0 评论 -
相机的标定+畸变矫正
摄像机标定本文目的在于记录如何使用MATLAB做摄像机标定,并通过opencv进行校正后的显示。首先关于校正的基本知识通过OpenCV官网的介绍即可简单了解: http://docs.opencv.org/2.4/doc/tutorials/calib3d/camera_calibration/camera_calibration.html对于摄像机我们所关心的主要参数为摄像机内参原创 2017-11-01 19:30:01 · 13464 阅读 · 13 评论 -
Qt打开USB摄像头做形状检测
Qt打开USB摄像头做形状检测,上次做圆检测。Qt打开USB摄像头,做圆检测在上文的基础上,添加一个函数,void contours(Mat image);直接上程序://形状检测void MainWindow::contours(Mat image){ vector > contours; vector hierarchy; Mat srcIma原创 2017-10-15 21:41:54 · 2319 阅读 · 0 评论 -
Python视觉处理(二)线检测
python线检测使用的时cv.HoughLinesP()函数:它有两个参数:minLineLength-线的最短长度,比这个线短的都会被忽略。MaxLineGap-两条线之间的最大间隔,如果小于此值,这两条线就会被看成一条线。这个函数的返回值就是直线的起点和终点。看主程序:import cv2import numpy as npfrom matplotlib impo原创 2017-10-15 14:58:03 · 5353 阅读 · 1 评论 -
python视觉处理(一)角点检测
学了一段时间python+opencv了,总结一下学习的内容。python 的整个语言和C++的opencv区别不大,就是不用定义,不用加结束符,不用输出图像。整个语句都是相当的简洁。import cv2import numpy as npimg=cv2.imread('Biaoding.jpg')gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)g原创 2017-10-15 09:31:46 · 4881 阅读 · 0 评论 -
Python视觉处理(四)HSV处理
很多时候,当图像中存在色彩时,我们用用RGB图像处理得不到想要的结果时,就可以把图像转化成HSV图像,再加以处理,这样处理起来获取方便了很多。当然,在特定的环境中,我们不知道HSV的范围,这个时候可以测试一下图像中想要凸显的物体的HSV的范围,再设定相应的阈值范围。点击图像观察图像HSV值代码:import cv2import numpy as npfrom matplotlib im原创 2017-10-22 15:28:06 · 25709 阅读 · 4 评论 -
Qt打开USB摄像头,做圆检测
Qt界面中添加一个Label,打开USB摄像头,并做相应的图像处理。一直都是使用C++配置opencv做视觉处理,最近要做界面,决定学习一种新的界面编辑软件,C#很好用,C#配置Emgu做视觉分析,一直都不如C++方便,个人比较喜欢用容器的方式操作像素对图像进行处理,正好Qt满足这个需求。在ui界面添加一个label,用来显示摄像头获取的图像:看见旁边有个被子,就做一个原创 2017-10-12 14:43:44 · 3220 阅读 · 1 评论 -
Win10下VS2015配置DirectShow+OpenCV并且多摄像头的采集
最近正好要用个比较小的摄像头用来采集图像,就买了一个USB接口的工业内窥镜摄像头,发现用opencv打开摄像头出现imshow()显示的时候一闪而过。表示摄像头是打开了,但是采集不了。最后了解了一下,常用的USB摄像头和笔记本本身自带的摄像头不是一个类型的,imshow()获取不了这种类型的摄像头。 还有网上各种解决方法,基本都不正确,出现这种选择某种摄像头的方法,在真正使用中不实用而...原创 2017-10-11 14:30:33 · 4501 阅读 · 4 评论 -
OpenCV学习笔记(十八) SIFT特征
SIFT特征:SIFT是目前应用最广泛的关键检测和描述算法。关键点描述也称特征点描述,SIFT特征提取充分利用了图像局部信息。主要包含了四个步骤:疑似特征点检测,去除伪关键点,关键点梯度和方向匹配及特征向量生成。OpenCV中提供了sift特征描述及提取的类siftFeatureDetector,应用:ocv:class:SIFT来封装用于计算特征描述的子类,该类继承特征描述基类Des原创 2016-12-30 20:30:29 · 1148 阅读 · 0 评论 -
OpenCV学习笔记(十七)模板匹配
我的目的就是选取图像中的指示灯,识别那种功能的指示灯亮了,进而知道那种功能打开了。模板匹配:模板匹配是傻瓜似的识别,从一副图像中寻找与模板图像相似部分的技术。模板匹配由matchTemplate()函数完成。介绍两个函数,matchTemplate()和minMaxLoc()函数:void matchTemplate(InputArray image, InputArray t原创 2016-12-29 16:48:48 · 1142 阅读 · 0 评论 -
OpenCV学习笔记(十六)角点检测
角点检测:moravec角点,harris角点,Shi-Tomasi角点原创 2016-12-27 17:59:54 · 4452 阅读 · 0 评论 -
OpenCV学习笔记(一)线性变换
关于图像线性变换技术———灰度线性变换。g(x,y)=a*f(x,y)+b |a|0:图像的亮度增加;|b|#include #include #include #include using namespace cv;using namespace std;// 图像线性变换Mat linearTransform(Mat srcImage, float a原创 2016-12-05 21:33:09 · 1904 阅读 · 2 评论 -
OpenCV学习笔记(一)对数变换
关于对数变换,目的就是将输入图像中较窄的低灰度值映射到输出图像较宽的灰度值。s=log(1+r);在程序中使用add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray(), int dtype=-1)要实现r+1:add(InputImage,Scalar(1.0),OutputImag原创 2016-12-06 09:27:51 · 10859 阅读 · 0 评论 -
OpenCV学习笔记(十一)图像导向滤波
图像导向滤波:导向滤波不仅仅能实现双边滤波的边缘平滑,而且在检测到边缘附近有很好的表现,可以应用在图像增强,HDR压缩,图像抠图及图像去雾等场景中。直接看实现吧:#include #include #include using namespace cv;using namespace std;double generateGaussianNoise(double mu, doub原创 2016-12-12 21:08:11 · 1208 阅读 · 0 评论 -
OpenCV学习笔记(十)双边滤波
双边滤波:双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空域信息和灰度相似性,达到保留图像的同时削弱噪声的效果。函数bilateralFilter(InputArray src , OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDE原创 2016-12-12 18:43:21 · 6274 阅读 · 0 评论 -
OpenCV学习笔记(九)谈谈中值滤波无效性
谈谈中值滤波无效性:不谈线性滤波,实用性不大,基本没用。中值滤波的简单在于选择灰度值的中值来替代该像素点的灰度值,该方法去除椒盐噪声,还勉强可以。但对绝大部分图像来说,不合适。但是比起线性滤波来说,优势还是蛮大的。单单从消除噪声来说和保边来说,更胜一筹。但是对于细节图像来说,就显得捉襟见肘了。这也是在处理细节图像上,不建议使用中值滤波的原因。下面就验证一下,先生成高斯噪声,用中值滤原创 2016-12-12 16:47:58 · 1013 阅读 · 0 评论 -
OpenCV学习笔记(八)高斯噪声
高斯噪声:高斯噪声是指概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声包括热噪声和散粒噪声。图像添加高斯噪声:#include #include #include #include #include #include using namespace cv;using nam原创 2016-12-11 15:40:29 · 9993 阅读 · 2 评论 -
OpenCV学习笔记(七)椒盐噪声
图像噪声:图像噪声是图像在获取或者传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号。很多时候将图像看作随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布函数和概率密度分布函数。图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受到噪声污染。椒盐噪声:椒盐噪声是数字图像中的常见噪声,一般原创 2016-12-11 10:26:18 · 6583 阅读 · 0 评论 -
OpenCV学习笔记(六)离散傅里叶变换
离散傅里叶变换:傅里叶变换将讲时域信号分解为不同频率的正弦信号或余弦信号叠加之和,时域分析只能反映信号的幅值随时间变化得情况,除单频率分量的简谐波外,很难对信息频率的组成及各频率分量的大小进行详细分析,而信号频谱分析提供了比时域信号波形更直观、更丰富的信息。在实际的图像处理中,我们仅仅使用了图像幅度信息,因为幅度图像半酣了我们需要的原图像几乎所有的几何信息。然和,如果你想通过修改幅度图像或者相原创 2016-12-10 16:58:31 · 1189 阅读 · 0 评论 -
OpenCV学习笔记(一)对比度拉伸
分段线性是线性变换的分段形式,分段线性中的各个函数是任意设定的。分段线性能够实现对图像某些区域的特定分析,常用于图像增强中。最简单的就是对比度拉伸。 对比度拉伸技术是通过扩展图像灰度级动态范围来实现的,它可以扩展对应的全部灰度范围。提高图像的对比度可以增强图像各个区域的对比效果,对图像感兴趣的部分进行增强,而对图像不感兴趣的部分进行抑制,对比度拉伸是重要的技术之一。 分段的灰度原创 2016-12-06 14:27:42 · 17282 阅读 · 2 评论 -
OpenCV学习笔记(一)之灰度级分层
灰度级分层是为了更好地提取图像某些区域灰度的亮度特征,常常应用于修复某些场景下造成的图像质量缺陷。常用的分成方法有两种:将待提取的感兴趣区域的灰度值映射为同一值,其他不感兴趣的映射成另一值。最终的输出图像为二值图像。将待提取的感兴趣区域映射变大或者变小,其他不感兴趣的灰度值保持不变,最终输出图像仍是灰度图像。灰度级分层实现代码:#include #include #in原创 2016-12-06 15:42:55 · 5896 阅读 · 0 评论 -
OpenCV学习笔记(十二)旋转文本矫正
旋转文本矫正:图像文本旋转通常在仿射变换时获取图像的倾斜角度,利用傅里叶变换中的时域与频域的变换关系,实现旋转文本的校正。旋转文本的特征明显就是存在分行间隔,当文本图像旋转时,其频域中的频谱也会随之旋转。根据这一特征来计算文本图像的DFT变换,DFT变换的结果是低频位于边界四角,高频集中在中心区域,将低频和高频互换,实现中心的移动,进而可以看到文本图像的频谱有明显的倾斜直线,再通过计算倾斜原创 2016-12-13 13:47:49 · 13913 阅读 · 12 评论 -
OpenCV学习笔记(十五)形状检测
1 轮廓检测图像目标中的形状检测是图像识别的重要的技术之一,对物体进行检测并提取,首先要做的就是提取物体的轮廓信息,然后在通过点集特征选择相应的算法进行处理,最后得到物体的形状信息。轮廓形状是我们看到物体最开始的印象,轮廓提取的原理是通过对图像进行二值化,利用边缘点连接的层次差别,提取位于数结构特征高的区域点集构成的集合,这部分最可能是物体的轮廓。主要用到的函数findContours()原创 2016-12-16 10:48:00 · 21691 阅读 · 1 评论 -
OpenCV学习笔记(十三)边缘检测
边缘检测:边缘检测算子有很多,Sobel、Laplace、Prewitt、Canny、Marr-Hildresh。Sobel算子:Sobel算子是主要用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导,用于计算图像灰度函数的近似梯度。void Sobel(InputArray src, OutputArray dst, int ddepth, int xorder, int原创 2016-12-15 11:05:44 · 5026 阅读 · 3 评论 -
OpenCV学习笔记(十四)圆检测技术
圆检测技术:圆检测技术目前用处还是特别的广泛的,锅炉、管道等类似的情况,我们不能切开或者打孔去测试流量,温度等参数。这是我们可以在管道上画一个圆,用摄像机去检测圆中心,进而测试出我们需要的信息。对于一个圆,就需要用三个参数来确定。使用Hough梯度法的依据是圆心一定出现在圆上的每个点的模向量上,圆上点的模向量的交点就是圆心的所在位置。Hough梯度法的第一步就是找到这些圆心,这样三维的累加原创 2016-12-15 20:54:12 · 16451 阅读 · 7 评论 -
OpenCV学习笔记(四)插值性能对比(resize)
插值性能对比(resize)OpenCV中提供的resize函数可以实现图像大小变换,默认插值方法为双线性插值。resize(ImputArray src,OutputArray dst,Size dsize,double fx=0,double fy=0,int interpolation=INTER_LINEAR);实现图像尺寸大小变换功能。参数dsize表示表示输出图像的尺寸,如原创 2016-12-09 20:40:53 · 16625 阅读 · 0 评论 -
OpenCV学习笔记(三)之投影峰谷查找
投影峰谷查找:图像的投影特征是分析图像中目标灰度变化规律的重要技术之一,一般是通过计算图像的X或Y轴的投影曲线,来分析其波峰波谷分布特征以实现目标分析,该技术常用于图像分割、字符检测及提取及文本分类等情况。对于投影曲线而言,波峰/波谷通常存在于曲线的极值点出,即图像变化为零的点。从离散曲线特征来看,波峰点是图像的局部最大值点,波谷点是图像的局部最小值点。波峰波谷的计算不能简单通过投影点前后大小原创 2016-12-07 21:44:53 · 6910 阅读 · 0 评论 -
OpenCV 学习笔记之Mat类讲解
译文参考The OpenCV Reference Manual (Release 2.3)August 17 2011Mat类OpenCV c + + n 维稠密数组类class CV_EXPORTS Mat{public:/ / … …很多的方法....../*!包括几位字段:-神奇的签名-连续性标志-深度(翻译 2016-12-08 10:58:00 · 4769 阅读 · 0 评论 -
OpenCV学习笔记(二)之最大熵阈值分割
一、计算图像的直方图1.概念及原理(1)直方图是一个简单的表,它给出了一幅图像或一组图像中拥有给定数值的像素数量。例如灰度图像的直方图有265个条目(或称为容器)。0号容器给出值为0的像素个数,1号容器给出值为1的像素个数,依次类推。显然对直方图的所有项求和会得到像素的总数。直方图也可以被归一化,归一化后的所有项之和等于1,在这种情况下,每一项给出的都是拥有特定数值的像素在图像中占原创 2016-12-07 21:34:06 · 6660 阅读 · 1 评论