《OpenCV学习笔记》
欧阳磊
技术改变世界,学无止境,不忘初心!
展开
-
《OpenCV判断是否加载图片的两种方法》
OpenCV加载图片是图像处理最基本的操作,但有的时候我们加载图片会因为图片路径不正确或者没有图片等原因而报错,经常写代码的凭经验就知道是哪错了,但初学者一般是看不懂这些错误,就会很恼火了,如果加个判断语句就会不一样了啥,如果是图片路径的原因而导致加载不到图片,它会在终端显示你要输出的错误信息,这样一看就很清楚了。【方法一】src = imread( "1.jpg" ,CV_LOA...原创 2017-03-15 13:27:49 · 6813 阅读 · 0 评论 -
OpenCV:imwrite函数保存图片
imwrite函数功能:用于将图像保存到指定的文件,可以为各种格式的图像。函数原型:bool cv::imwrite(const String & filename,InputArray img,const std::vector<int> & params = std::vector<int>() ) 函数参数:filename...原创 2017-03-15 19:06:33 · 90401 阅读 · 6 评论 -
OpenCV:鼠标画直线并显示坐标
【天问】存于咸阳宫内,为秦始皇的配剑。当一个人成为天下至尊,权利已是他手中最锋利的宝剑,所谓“天问”不正是一种举剑问天、舍我其谁的王者气势的体现吗?【鼠标操作】1、回调函数CV_EXPORTS void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0);...原创 2017-03-15 17:11:28 · 9124 阅读 · 5 评论 -
《OpenCV读取图片+摄像头视频播放+文件夹读取视频》
【开发环境】操作系统:VS2015 64位 OpenCV版本:OpenCV2.4.13#注意:waitKey(1);是延时1ms,如果为0则一直显示,一般显示图片为0,视频显示大于0,如果视频显示为0,则会卡在第一帧,也就是一直显示第一帧图片。摄像头输入视频#include <opencv2\opencv.hpp> #include <iostre...原创 2017-09-05 15:34:19 · 1226 阅读 · 0 评论 -
OpenCV:头文件和命名空间
OpenCV中的C++类和函数都是定义在命名空间cv之内的,就像C++的命名空间是std一样。链接地址:《C++学习笔记二之4种访问名称空间std的方法》OpenCV2的头文件一般来说OpenCV2,使用哪一模块的内容就添加哪一模块的头文件,例如:1、如果使用了Mat类,属于core模块。那么头文件就是#include <opencv2/core/core.h...原创 2017-12-10 00:43:08 · 11453 阅读 · 2 评论 -
《OpenCV视频中分割圆形区域》
OpenCV视频中分割圆形区域,利用判断图中的点是否在画的圆内,如果在圆内,则不变色;如果不在圆内,则改变它的的颜色。从而只能看到圆内的视频,并且可以把圆形部分截取,利用的是ROI(感兴趣区域),但是因为图片必须是矩形的,所以ROI也只能是矩形,截取的圆外接矩形。使用的开发工具OPENCV版本:OpenCV2.4.13操作系统:windows10VS版本:VS2015专业版加载...原创 2017-12-11 21:21:32 · 3531 阅读 · 0 评论 -
《OpenCV视频中截取矩形框》
分割圆形区域链接地址:《《OpenCV视频中分割圆形区域》》【一】效果图【二】源代码#include#includeusing namespace std;using namespace cv;void Draw_rectangle(Point pt1, Point pt2);void on_mouse(int event, int x, int原创 2017-12-11 21:49:31 · 1785 阅读 · 2 评论 -
OpenCV:ROI区域透明处理
实现步骤:1、获取原始图像1的ROI区域,ROI区域与原始图像2大小相同;2、将两张大小和通道数相同的图像(ROI和原始图像2)进行加权,加权后图像为透明状;3、将加权后的图像转换为灰度图作为掩模;4、将加权后的透明图像和掩模进行处理,然后拷贝到原始图像的ROI区域上。示例代码:#include <opencv2/core.hpp>#includ...原创 2017-12-13 14:03:11 · 4726 阅读 · 1 评论 -
OpenCV设置和获取摄像头参数
适用于VideoCapture打开的摄像头VideoCapture capture(0);设置摄像头参数不要随意修改capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度capture.set(CV_CAP_PROP_FPS, 30);/...原创 2017-12-22 17:05:02 · 17315 阅读 · 3 评论 -
《OpenCV一个窗口显示两个摄像头》
【一】原理1、开启两个摄像头,系统默认从0开始查找,两个摄像头使用0和1就够啦,然后把显示窗口尺寸固定,这里用的是320和240VideoCapture capture1(0);VideoCapture capture2(1);2、创建一个黑色图片,大小刚好可以容纳两个摄像头窗口,width=640,height=240Mat frame(240,640,CV_8UC3,Sc...原创 2017-12-13 15:33:35 · 4876 阅读 · 2 评论 -
《OpenCV求轮廓的矩中心》
【一】效果图【二】示例代码#include#includeusing namespace std;using namespace cv;void Draw_circle(Mat img, Point pt_center, int pt_radius);#define WINDOW_NAME "【drawing】"int main(){ Mat gray,g原创 2017-12-14 19:58:40 · 1383 阅读 · 0 评论 -
《OpenCV支持的图片格式》
OpenCV目前支持的图像格式包括:Windows位图文件 - BMP, DIB;JPEG文件 - JPEG, JPG, JPE;便携式网络图片 - PNG;便携式图像格式 - PBM,PGM,PPM;Sun rasters - SR,RAS;TIFF文件 - TIFF,TIF;OpenEXR HDR 图片 - EXR;JPEG 2000 图片- jp2。可原创 2017-12-25 11:40:52 · 13081 阅读 · 0 评论 -
《OpenCV颜色空间及颜色空间相互转化》
【RGB颜色空间】1、三基色模式:RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。2、空间模型RGB颜色空间是用一个单位长度的立方体来表示颜色的,黑蓝绿青红紫黄白8种常见颜色分别位居立方体的8个顶点,通常将黑色置于三维直角坐标系的原点,红绿蓝分别置于3根坐标原创 2017-12-25 14:24:26 · 1765 阅读 · 0 评论 -
VS配置OpenCV教程(超详细)
目录安装环境说明下载OpenCV配置OpenCV开发环境属性表测试可能存在的问题安装环境说明操作系统:Windows10OpenCV版本:OpenCV2和OpenCV3VS版本:VS2015或者VS2017下载OpenCVOpenCV下载地址:http://opencv.org/或者直接搜OpenCV下...原创 2017-12-09 15:59:15 · 145915 阅读 · 34 评论 -
《OpenCV训练级联分类器》
我是个初学者,我只想把我所学到经验分享一下,不好勿喷。一.寻找传说中的opencv_traincascade.exe和opencv_createsamples.exeopencv里自带了opencv_traincascade.exe,opencv_createsamples.exe这两个东东,找出来新建一个文件夹,把这两二货放进去。解释一下:opencv_createsamples.exe...原创 2016-12-31 19:07:35 · 3410 阅读 · 0 评论 -
OpenCV:VideoWriter视频录制
示例代码:/************************************************************************* @ Creator:OYXL* @ Project Creation time:2018/5/24* @ Function:OpenCV录制视频* @ Attention:需要按ESC才能完整录制视频,直接停止调试录制的视频...原创 2018-04-08 14:52:31 · 2289 阅读 · 0 评论 -
OpenCV:视频分解为图片
代码实现的功能:从文件中加载视频,获取视频的总帧数,然后逐帧保存为连续的图片。/************************************************************************* @ Creator:OYXL* @ Project Creation time:2018/5/22* @ Function:从文件中获取视频分解成图片 ...原创 2018-05-29 10:30:38 · 1511 阅读 · 0 评论 -
OpenCV:金字塔LK光流法
金字塔LK光流法的三个假设亮度恒定,即图像场景中目标的像素在帧间运动时外观上保持不变; 时间连续或者运动是”小运动“,即图像的运动随时间的变化比较缓慢; 空间一致,即一个场景中同一表面上邻近的点具有相似的运动。光流法的原理光流的概念是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的...原创 2018-05-31 17:14:32 · 7279 阅读 · 1 评论 -
OpenCV:图像阈值操作
目录大津阈值法(OTSU)固定阈值法自适应阈值双阈值法半阈值法大津阈值法(OTSU)最大类间方差法(otsu)的公式推导:记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。则图像的总平均灰度为:u=w0*u0+w1*u1。前景和背景图象的方差:g=w0*(u0-u)*...原创 2018-06-20 15:59:46 · 1025 阅读 · 0 评论 -
《Qt5配置OpenCV》
安装配置Windows10+Qt5.11+OpenCV3.3+MinGW+CMake3.13下载和安装Qt下载链接:http://download.qt.io/archive/qt/或者http://download.qt.io/official_releases/qt/同时也可以到Qt官方网站去下载,只是需要注册一个账户,注册了就可以下载一个开源的Qt官方...原创 2018-10-21 23:09:53 · 3353 阅读 · 1 评论 -
Qt5:opencv摄像头播放视频
完整代码GitHub下载:Qt+opencv摄像头播放视频CSDN下载:https://download.csdn.net/download/mars_xiaolei/11015580前期准备我们的目的是将摄像头采集到的视频显示在Qt界面窗口上,而不是imshow到OpenCV自己的窗口上。在编写代码之前,需要先在Qt上配置OpenCV,如果没有配置,请先把O...原创 2018-10-23 23:17:17 · 10727 阅读 · 6 评论 -
《OpenCV获取图像属性(行高、列宽、通道数等)》
Mat类矩阵类型说明Mat类矩阵类型可以是CV_8UC3、CV_16SC1...CV_64FC3等。里面的8U表示8位无符号整数(0~255),16S表示16位有符号整数(-32768~32767),64F表示64位浮点double类型数据,C后面的数表示通道数,例如C1表示一个通道的图像,C3表示3个通道的图像。通道一般只有1、3、4,1个通道表示灰度图(0-255),3个通道为...原创 2019-03-18 13:28:42 · 25321 阅读 · 3 评论 -
《OpenCV:行人检测简单示例》
行人检测(图片)//本代码只能在Release模式下运行#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ Mat image=imread("1.jpg"); if (image.empty()) {...原创 2019-03-27 11:30:19 · 1256 阅读 · 0 评论 -
《OpenCV:相机标定(自带Demo)》
测试环境OpenCV版本:OpenCV342VS版本:VS2015操作系统:Windows10代码为OpenCV自带的Demo,需要在命令行界面输入命令。测试准备OpenCV自带相机标定Demo:calibration.cpp和calibration_artificial.cpp,这两个cpp文件都位于opencv\sources\samples目...原创 2019-03-27 16:35:02 · 4098 阅读 · 3 评论 -
《OpenCV:鼠标操作(绘制直线、矩形、圆)简单示例》
#include<opencv2/opencv.hpp>#include<iostream>void on_mouse(int event, int x, int y, int flags, void* ustc);void drawRectangle(cv::Mat src, cv::Point pt1, cv::Point pt2);void draw...原创 2019-04-11 11:55:49 · 2217 阅读 · 0 评论 -
OpenCV:创建Mat矩阵的几种常用方法
目录创建二维矩阵创建多维矩阵创建特殊矩阵创建二维矩阵默认构造函数函数原型:Mat();示例:Mat m(480,640,CV_8UC3);Mat n;n=m;创建无颜色矩阵函数原型:void Mat::create(int _rows, int _cols, int _type)void Mat::create(Size _s...原创 2019-05-16 23:49:48 · 14827 阅读 · 3 评论 -
OpenCV:遍历图像
#include <opencv2/opencv.hpp>#include <iostream>int main(){ int channels[3] = {0}; cv::Mat srcImage = cv::Mat(240,320,CV_8UC3,cv::Scalar(75,125,225)); //直接访问 for (int y=0;y<10;...原创 2019-06-21 17:53:17 · 699 阅读 · 0 评论 -
OpenCV:延迟函数waitKey()
函数原型:int waitKey(int delay = 0);waitKey函数用于显示的延迟。例如,waitKey(0)将无限显示窗口,直到按下任意按键退出延迟事件(适用于显示图像)。如果delay大于0,例如,waitKey(25)将每隔至少25ms显示视频的一帧图像(适用于显示视频帧),如果要按键退出,则需要将waitKey(25)与一个按键值(ASCII码)比较。#...原创 2019-06-10 10:58:35 · 8382 阅读 · 0 评论 -
OpenCV:按任意按键退出程序时中断异常
opencv显示图像时,按键退出延迟,中断异常,可能是忘了销毁所有窗口了,添加一个destroyAllWindows()函数即可解决。原创 2019-06-10 11:03:19 · 2291 阅读 · 0 评论 -
OpenCV:显示中文字符
OpenCV默认是不支持显示中文字符的,于是网上有人自己写了一个类实现,只需要下载到自己的代码文件中,添加头文件就可以通过调用函数来显示中文了。下载链接csdn下载:https://download.csdn.net/download/mars_xiaolei/11233962百度网盘:https://pan.baidu.com/s/1gdYatLLOKmDI-_6OOzdQNg...原创 2019-06-10 16:13:14 · 6901 阅读 · 8 评论 -
OpenCV:图像处理常见的两种噪声
椒盐噪声#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <cstdlib>#include <iostream>using na...原创 2019-06-10 16:28:46 · 2553 阅读 · 0 评论 -
OpenCV:旋转矩形(RotatedRect)
RotatedRect类是OpenCV的基础类,用于创建旋转矩形,下面是它的构造函数,包含旋转中心点、尺寸大小和旋转角度。构造函数1:RotatedRect(const Point2f& center, const Size2f& size, float angle);center 旋转矩形的质心 size 旋转矩形的宽度和高度 angle...原创 2019-06-20 18:26:57 · 33280 阅读 · 2 评论 -
OpenCV:计算三角形的角度
已知三角形的三个顶点,先计算每条边的边长,利用三角形的余弦定理,使用反三角函数求出每个角的弧度值,再将弧度值转化为角度值。三角形的余弦定理:cosA=(b^2+c^2-a^2)/2bccosB=(a^2+c^2-b^2)/2accosC=(b^2+a^2-c^2)/2ab弧度和角度转换:角度=弧度*180/PI示例代码:#include <...原创 2019-06-21 13:59:14 · 3947 阅读 · 0 评论 -
OpenCV:帧差法
帧差法原理帧差法可以用来提取视频中的前景,也就是运动的物体,通过将不同帧进行相减,获取两帧之间的差异,然后再用图像处理算法将差异显示出来。可以将视频的第一帧作为背景,也可以将相邻两帧的前一帧作为背景。示例代码#include <opencv2/opencv.hpp>#include <iostream>const char* WINDOW = "...原创 2019-06-17 17:09:47 · 3457 阅读 · 0 评论 -
OpenCV:Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow
Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow出现以上报错信息,有可能是加载图像路径错误,未成功加载图像,图像的宽和高没有大于0,导致显示不出来。写代码的时候最好加上判断图像是否加载成功,如果加载失败就报错退出。...原创 2019-06-21 17:32:37 · 5737 阅读 · 0 评论 -
OpenCV:判断点是否在矩形内
点和矩形的位置关系有三种情况:1、点在矩形内2、点在矩形边界上3、点在矩形外#include <opencv2/opencv.hpp>#include <iostream>int main(){ //创建图像 cv::Mat srcImage = cv::Mat(240,320,CV_8UC3,cv::Scalar(75,75,75)...原创 2019-06-27 10:36:42 · 6736 阅读 · 0 评论 -
C++:文件的写入和读取
C++提供了 std::fstream,用于以独立于平台的方式访问文件。std::fstream从std::ofstream那里继承了写入文件的功能,并从 std::ifstream 那里继承了读取文件的功能。要使用 std::fstream 类或其基类,需要添加头文件:#include <fstream>要使用 fstream、ofstream 或 ifst...原创 2017-01-11 17:29:04 · 1174 阅读 · 0 评论 -
OpenCV:多边形逼近轮廓
当我们查找到一个轮廓进行形状分析时,通常需要使用多边形来逼近一个轮廓,使得顶点数变少,OpenCV的approxPolyDP函数就可以实现这个功能。approxPolyDP函数使用了Douglas-Peucker算法:1、先从轮廓中找出两个最远的点,将两点相连,即b-c;2、在原来的轮廓上查找一个离线段距离最远的点,将该点加入逼近后的新轮廓中,即c-d;3、然后重复前面的算法,不断...原创 2019-08-30 11:36:51 · 7404 阅读 · 0 评论 -
OpenCV:如何获取摄像头的型号以及USB设备的VID和PID信息?
VID和PIDPID/VID唯一标识一个设备,HardwareID是为了给系统识别的 ,他是根据PID/VID而生成的。这个与序列号没什么关系,序列号一般都是厂家固化到芯片中的信息而已。GUID只是为了标志你安装的设备是属于一个什么类当中,这个类可以显示再设备管理器中。比如:你可以定义一个类,当然这个类有与系统中任何类都不同的GUID,然后选择一个图标和类名,就可以同网卡等其他设备一起显示在设...原创 2019-09-05 14:18:48 · 16034 阅读 · 16 评论