
opencv
记录opencv常见函数用法.
SSS_369
毅力,每日至少一篇。
展开
-
OpenCV:打开摄像头获取视频流
代码:#include #include using namespace cv;using namespace std;int main(){//【1】从摄像头读入视频 VideoCapture capture(1); if (!capture.isOpened()){cout<< "open camera fail ..." ...原创 2019-10-13 13:06:00 · 4481 阅读 · 0 评论 -
OpenCV:findHomography() vs getPerspectiveTransform()的区别
作用:都用于计算单应矩阵,即解一个线性方程组。由于单应矩阵有8个未知数(3*3,其中第9个数为1),所以至少需要4个点(每个点-x,y,提供2个约束方程)。区别:1.计算方法不同:通过跟踪源码,发现getPerspectiveTransform用的是SVD分解,findHomography看不出是用什么方法(没注释,一堆等式)。但两者计算结果是一样的。2.输入参数不同:getPers...原创 2019-06-13 22:41:11 · 1611 阅读 · 0 评论 -
OpenCV:多边形填充、矩形填充
opencv中没有旋转矩形,也没有填充矩形原来它封装了一个 填充多边形fillPoly()#include <opencv2/opencv.hpp>#include <iostream>#pragma comment(lib,"opencv_world341.lib")using namespace cv;using namespace std;int ...原创 2019-05-07 20:49:51 · 4896 阅读 · 0 评论 -
OpenCV:梯度幅值、梯度方向
1. 梯度计算公式推导上式可以用x和y方向梯度的,但是这样不够直观,不能直接感受梯度具体是朝哪个方向,因此,梯度可以用梯度幅值和梯度方向表示;但是求模的公式计算有点繁琐,又是平方,又是开根号的。不妨将他简化一下,反正只要能表示他的长度就行了,公式变为:这样求起来多方便,就一个绝对值以及求和。但是实际图像中的操作如何用上述公式计算呢?由于图像像素点是离...原创 2019-05-09 20:49:30 · 10823 阅读 · 0 评论 -
OpenCV:直方图
1. 直方图定义CV_EXPORTS void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, ...原创 2019-05-09 20:30:41 · 174 阅读 · 0 评论 -
OpenCV:字符分割——方向投影法
常见字符分割方法:方向投影分割法和连通域分割法1. 方向投影法方向投影法主要思想就是记录每一行或者每一列对应值的像素的个数,然后根据这些个数判断它是不是边界或者是目标物体。其中像素的个数就像是一个阈值,最后可以把每一行点的个数画出来便于直观的观察。投影法的就是,利用二值化图像素分布直方图进行分析,从而找出相邻字符的分界点进行分割。以竖直方向投影分割字符为例,程序如下:#...原创 2019-05-07 23:11:19 · 6339 阅读 · 3 评论 -
OpenCV:minMaxLoc vs minMaxIdx
minMaxLoc和minMaxIdx函数的功能是一样的,计算src里的最大值、最小值、返回最大最小的索引1. 函数格式//! finds global minimum and maximum array elements and returns their values and their locationsCV_EXPORTS_W void minMaxLoc(InputArray...原创 2019-05-08 22:49:37 · 2532 阅读 · 3 评论 -
OpenCV:Vec4f二维直线类型
1. Vec4的参数本质二维直线类型为cv::Vec4f,三维直线类型是cv::Vec6f,输出参数的前半部分给出的是直线的方向,而后半部分给出的是直线上的一点(即通常所说的点斜式直线)。Vec4f line_para;Point point0;point0.x = line_para[2];//2、3代表点point0.y = line_para[3];double k...原创 2019-04-30 20:35:20 · 10580 阅读 · 0 评论 -
OpenCV:convertScaleAbs
convertScaleAbs()用途:1. 对整个图像数组中的每一个元素,进行如下操作:该操作可实现图像增强等相关先行操作的快速运算,具体用法如下:void cv::convertScaleAbs( cv::InputArray src, // 输入数组 cv::OutputArray dst, // 输出数组 double alpha = 1....原创 2019-04-28 22:51:44 · 12851 阅读 · 2 评论 -
OpenCV:基本画图操作
OpenCV有绘图函数,可以把想要的图形直接画到图像,分别为line()画直线、arrowedLine()带形状直线、rectangle()画矩形、circle()画圆、ellipse()画椭圆、fillConvexPoly()填充多边形、drawContours()画轮廓、putText()显示文字。下面介绍这些函数的简单用法--------------------------------...原创 2019-04-13 15:58:06 · 8327 阅读 · 0 评论 -
OpenCV:SVM目标分类简单示例
1. SVM:support vector machine支持向量机2. 头文件:#inlcude “opencv/ml.hpp”具体用法,见opencv官方注释;3. svm可用于目标分类,简单实例如下:目的:去掉图中背景,提取蔬菜区域。#include <iostream>#include <opencv2/opencv.hpp>#pr...原创 2019-05-21 12:14:37 · 1567 阅读 · 0 评论 -
Ubuntu:安装pcl出现cannot find -lvtkproj4解决办法
问题:解决方法:需要在cmakelist中加一条指令修复,即在add_executable语句前面加上list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")参考文章:1. https://blog.youkuaiyun.com/danmeng8068/article/details/77341532...原创 2019-07-06 14:55:01 · 531 阅读 · 0 评论 -
No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so 解决方法
终端输入命令:sudo ln -s /usr/lib/x86_64-linux-gnu/libproj.so.9 /usr/lib/x86_64-linux-gnu/libproj.so原创 2019-07-06 14:51:55 · 2718 阅读 · 1 评论 -
Ubuntu:安装OpenCV4
1. 进入官网,下载opencv4源码、contrib源码各个版本链接:contrib: https://github.com/opencv/opencv_contrib/releasesoepncv: https://opencv.org/releases.html安装依赖sudo apt-get install build-essentialsudo apt-ge...原创 2019-07-06 01:02:55 · 2427 阅读 · 1 评论 -
Ubuntu:同时安装两个版本的OpenCV
由于opencv有2/3/4版本,再跑开源代码时会有版本要求,因此,需要安装多个版本的opencv;1. 下载:参考https://blog.youkuaiyun.com/sss_369/article/details/94755824因为前期已经装过opencv4,现在安装opencv3;2. 打开cmake-gui,建立build 编译opencv3、contrib33. make...原创 2019-08-24 14:03:51 · 2151 阅读 · 0 评论 -
Ubuntu:安装cudnn10.1
1. 下载cudnn10.1:官网:https://developer.nvidia.com/rdp/cudnn-archive可以下载两种安装文件:①按上图下载的是cudnn-*tgz的压缩包时解压下载的文件,可以看到cuda文件夹,在当前目录打开终端,执行如下命令:sudo cp cuda/include/cudnn.h /usr/local/cuda/include...原创 2019-07-04 00:37:48 · 3042 阅读 · 0 评论 -
Ubuntu:安装 cuda10.1 驱动
1. 下载cuda10.1:英伟达官网链接:https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=runfilelocal2.安装10.1:【...原创 2019-07-03 23:12:30 · 36559 阅读 · 6 评论 -
OpenCV:copyMakeBorder()-拓展边界
1. 函数原型:void copyMakeBorder( InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value = Scalar())src:输入的数组。dst:输出的...原创 2019-06-18 00:18:45 · 6938 阅读 · 0 评论 -
OpenCV:VideoCapture同时打开两个摄像头
程序如下:#include <opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std; int main(){ //initialize and allocate memory to load the video stream from camera...原创 2019-06-18 00:10:26 · 11713 阅读 · 7 评论 -
OpenCV:xml文件中数据的写入和读取
xml 是Extensible Markup Language可扩展标记语言的简写;本文主要介绍:xml文件结构;xml文件的读和写;xml文件中-vector数据结构;xml文件中-map数据结构;遍历xml文件节点;xml中自定义结构存储;1.xml文件结构①xml文件的第一行为xml文件说明,一般说明了xml的版本和编码信息;如:<? ...原创 2019-06-17 23:41:52 · 4604 阅读 · 1 评论 -
OpenCV:相机标定-getOptimalNewCameraMatrix函数
相机标定后,对采集的图像进行畸变矫正,代码如下:if( !capture.isOpened() && showUndistorted ) { Mat view, rview, map1, map2; initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(), ...原创 2019-06-11 23:28:46 · 18659 阅读 · 0 评论 -
OpenCV:图像变换-仿射变换与透视变换研究
上面三幅图分别为标志图形、道路标线、QR码的校正前后图,校正采用的是透视变换矩阵。下面就主要研究一下透视变换。1. 概念透视变换(Perspective Transformation)是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影...原创 2018-11-05 00:16:39 · 1263 阅读 · 0 评论 -
OpenCV:图像像素访问方法
图像像素访问方法比较常见的有三种①指针访问:速度最快②迭代器iterator:较慢,非常安全,指针访问可能出现越界问题③动态地址计算:更慢,通过at()实现。适用于访问具体某个第i行,j列的像素,而不适用遍历像素要想访问图像像素就需知道图像在内存中的存储方式Mat在内存中存储方式如下: ...原创 2019-04-13 15:40:24 · 520 阅读 · 0 评论 -
OpenCV:基本矩阵操作与示例
OpenCV的基本矩阵操作与示例OpenCV中的矩阵操作非常重要,本文总结了矩阵的创建、初始化以及基本矩阵操作,给出了示例代码,主要内容包括:创建与初始化 矩阵加减法 矩阵乘法 矩阵转置 矩阵求逆 矩阵非零元素个数 矩阵均值与标准差 矩阵全局极值及位置 其他矩阵运算函数列表1.创建与初始化矩阵1....原创 2019-04-09 22:33:27 · 950 阅读 · 0 评论 -
OpenCV:countNonZero函数
countNonZero():返回灰度值不为0的像素数,可用来判断图像是否全黑。 IplImage* srcImg = cvLoadImage("Lena.jpg"); //注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据)Mat M(srcImg, true); #include &...原创 2019-04-09 22:19:04 · 23286 阅读 · 0 评论 -
OpenCV:图像按位运算-与、或、非、异或
1. 函数原型://按位与void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());//按位或void bitwise_or(InputArra...原创 2018-11-17 15:24:06 · 11652 阅读 · 0 评论 -
OpenCV:Mat访问像素
1. at方式单通道:mat.at<uchar>(row,col);三通道:每一个像素的位置都包含了三个uchar数据,三通道使用Vec3b;Vec3b v= mat.at<Vec3b>(row,col);//v[0]、v[1]、v[2]【注】:Vec3b实质上是一个uchar的数组,最多装三个uchar数据;参考文章:1. https://...原创 2018-11-17 15:13:55 · 306 阅读 · 0 评论 -
OpenCV:绘制旋转矩形区域
问题:给定4个点,求最小外接矩形,然后在图像中绘制出旋转矩形区域。程序:Point p1(800,400), p2(1100,605), p3(902,970), p4(802,780);//4个点vector<Point> vec_pts;vec_pts.push_back(p1);vec_pts.push_back(p2);vec_pts.push_back(...原创 2018-11-23 19:26:28 · 5565 阅读 · 0 评论 -
OpenCV:感兴趣区域ROI相关函数操作
1. 之前版本函数void cvSetImageROI(IplImage* image, CvRect rect)//设置ROI区域,只显示ROI区域void cvResetImageROI(IplImage* image);//复位ROI区域,重置,释放ROI区域CvRect cvGetImageROI(const IplImage* image);//获取ROI区域,Rect类...原创 2018-11-16 23:54:38 · 1436 阅读 · 0 评论 -
OpenCV: Mat与IplImage*间的相互转换
1. Mat -->IplImageMat mat_img=imread("samples.bmp");IplImage* ipl_img;ipl_img = &IplImage(mat_img);2. IplImage--->MatIplImage* ipl_img = cvLoadImage("samples.bmp");;Mat mat_img;m...原创 2018-11-16 23:30:45 · 1429 阅读 · 0 评论 -
OpenCV:resize-改变图像的大小
1. OpenCV提供了resize函数来改变图像的大小,函数原型如下:void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpola...原创 2018-11-16 12:10:27 · 5448 阅读 · 0 评论 -
OpenCV 2.4.10: createTrackbar()+getTrackbarPos()
如何在OpenCV中用createTrackbar函数创建和使用轨迹条,以及图像对比度、亮度值的动态调整?<1>创建轨迹条——createTrackbar()功能:创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,它往往会和一个回调函数配合起来使用。 格式:C++: int createTrackbar( conststring& trackbar原创 2017-03-13 17:06:18 · 1797 阅读 · 0 评论 -
OpenCV:访问图像中的像素
OpenCV图像处理算子都是一个函数。作用: 接受一个输入或多个输入,产生输出图像。 格式:g(x)=f(h(x))//单个输入,或g(x)=f(h0(x),h1(x),...,hn(x))//多个输入图像处理变换中典型的操作:点操作 点操作: 图像亮度和对比度调整。 公式:g(x)=a*f(x)+b;或g(i,j)=af(i,j)+b;参数:参数f(x)表示源图像像素。参数g(x原创 2017-03-17 15:51:37 · 606 阅读 · 0 评论 -
OpenCV:remap()简单重映射
学习自:【OpenCV入门教程之十七】OpenCV重映射重映射,就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。为了完成映射过程, 我们需要获得一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的。一般情况下,我们通过重映射来表达每个像素的位置 (x,y), 像这样 : g(x,y) = f ( h(x,y) ) 在这里, g( ) 是目标图像, f转载 2016-10-31 15:58:20 · 26447 阅读 · 9 评论 -
OpenCV:resize()重新调整图像大小
OpenCV中,resize函数用的比较多。C++: void resize(InputArray src, //输入 OutputArray dst,//输出 Size dsize, //输出图像的大小 double fx=0, double fy=0, //fx、fy是沿x轴和y轴的缩放系数原创 2016-10-31 15:08:17 · 21189 阅读 · 0 评论 -
OpenCV:YAML vs XML格式文件的读写操作
参考文章:Opencv YAML和XML格式文件操作详解YAML格式的文件拓展名包括:.yml 和 .yaml;XML格式的文件拓展名为: .xml;在OpenCV中,使用FileStorage进行文件读写。XML文件操作与YAML一样,不过存在一些细小差别。// write file保存数据cv::FileStorage fs(fileName,cv::FileStorage::WRIT原创 2016-10-30 15:13:20 · 626 阅读 · 0 评论 -
OpenCV:计时函数getTickCount、getTickFrequency
1. getTickCount() & getTickFrequency()getTickCount():返回CPU自某个时间以来走过的时钟周期数。getTickFrequency():返回CPU一秒中所走的时钟周期数,因此可以以秒为单位对某运算时间计时。double start = static_cast<double>(getTickCount());doubl...原创 2018-12-04 20:13:15 · 3316 阅读 · 0 评论 -
OpenCV:鼠标事件 选取矩形ROI区域
目的:通过点击鼠标,选择矩形ROI区域,为后续的ROI区域处理提供方便。代码如下:#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <stdio.h> using namespace cv; Mat org, dst,...原创 2018-12-05 22:53:42 · 3528 阅读 · 0 评论 -
OpenCV:将一幅图像复制到另一幅图像的指定区域中ROI
用途:使用一幅图像(或ROI)覆盖(替换)另一图像的指定区域,直接的方法是逐个像素进行复制,但这是一种效率很低的操作,下面介绍opencv中一种效率较高且简便的操作。函数:roiImg.copyTo(src(roi));具体看如下代码://设置深蓝色背景画布cv::Mat image = cv::Mat::zeros(512, 512, CV_8UC3);image.setT...原创 2019-04-15 21:56:24 · 22207 阅读 · 1 评论 -
OpenCV:error C2872 ACCESS_MASK: 不明确的符号
error C2872: ACCESS_MASK: 不明确的符号当一个函数没有在编译头文件中找到定义时,一般就会报错:未标识的符号。 至于报错不明确的符号,那可能是因为,工程的编译文件里有多个该符号定义。笔者没那么聪明,是在前辈基础经验上总结的。opencv3.0的cv “ACCESS_MASK”冲突不想打开链接可以直接看原文截图:原因:是因为winnt.h里边定义了cv,它...原创 2019-04-15 21:52:30 · 2784 阅读 · 1 评论