[toc]
2019年3月8日21点48分 杨军伟学习笔记
一、下载Opencv
1、官网下载(测试部分无法运行) 巨慢
2、https://opencv.org/releases.html
3、(3.2以下版本)https://blog.csdn.net/love666666shen/article/details/76449155
4、cmake下载:https://cmake.org/download/
二、安装Opencv
-
一、添加环境变量:目录\opencv\build\x86\vc11\bin 或者
目录\opencv\build\x64\vc11\bin -
二、在【通用属性】 ->【VC++目录】 ->【包含目录】中 添加:
目录\opencv\build\include 目录\opencv\build\include\opencv 目录\opencv\build\include\opencv2
三、工程库(lib)目录的配置 【VC++目录】 ->【库目录】中 添加:
目录\opencv\build\x86(64)\vc11\lib
四、添加依赖库
-
在【链接器】->【常规】->【附加库目录】选择lib目录 如:目录\opencv\build\x64\vc14\lib
-
在【链接器】->【输入】->【附加依赖项】中添加库文件名称(带’d’的时DEbug中用的)
opencv_world320.lib opencv_world320d.lib1、OpenCV 3.2.0附加依赖项库 网上找的不能用 解决方法:到安装目录\opencv\build\x64\vc14\lib 找到对应的lib文件添加,我只找到目录下的2个 添加暂时可运行(后续验证就是这两个就行) 2、由于找不到 opencv_world320.dll,无法继续执行代 解决方法:到安装目录\opencv\build\x64\vc14\bin 复制里面的dll文件到 C:\Windows\System32 (x64) C:\Windows\SysWOW64 (x86)32位系统
五、其他情况不安全代码
将宏添加到 【c/c++】->【预处理器】->【预处理器定义中】
测试代码://图片放在项目的二级目录下
#include <opencv2/opencv.hpp>
using namespace cv;
int main(void)
{Mat img=imread("1.jpg"); imshow("test",img); waitKey(5000);
}
图片打开成功三、一般类与函数
-
1、Mat类
2、imread 读取图片,指定读取的颜色方式。 3、imshow 在指定名称的窗口显示指定图片 4、namedWindow 创建窗口 5、imwrite 向文件中写入一张图片 6、VideoCapture 类:对视频进行读取显示,以及调用摄像头。 7、定义ROI的两种方法
1、Mat类
用于保存图像以及其他矩阵数据的数据结构,默认情况下其尺寸为0.
2、imread//读数据
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
读取图片,指定读取的颜色方式。
filename:路径名
flags: 载入标识,指定加载图像的颜色类型,
默认是1,返回彩色图像,
为0时 返回灰度图像。
读取路径格式说明:https://blog.csdn.net/xingchenbingbuyu/article/details/51375078
| |
3、imshow//显示
CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
在指定名称的窗口显示指定图片
winname:显示的窗口名称。
mat: 显示的图像。
4、 namedWindow//创建窗口
CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
winname: 窗口名称(与imread中的参数1名称一致时,则imread使用该窗口)
flags : 显示方式
WINDOW_NORMAL = 0x00000000, //!< the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.
WINDOW_AUTOSIZE = 0x00000001, //!< the user cannot resize the window, the size is constrainted by the image displayed.
WINDOW_OPENGL = 0x00001000, //!< window with opengl support.
WINDOW_FULLSCREEN = 1, //!< change the window to fullscreen.
WINDOW_FREERATIO = 0x00000100, //!< the image expends as much as it can (no ratio constraint).
WINDOW_KEEPRATIO = 0x00000000, //!< the ratio of the image is respected.
WINDOW_GUI_EXPANDED=0x00000000, //!< status bar and tool bar
WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way
5、向文件中写入一张图片。
-
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
const std::vector<int>& params = std::vector<int>());
向文件中写入一张图片。
filename:图片的名字,带后缀。支持转换成不同的格式。 img :mat格式的图像。
6、对视频进行读取显示,以及调用摄像头。
-
VideoCapture 类:
(1)先实例再初始化 VideoCapture capture; capture.open("1.avi"); //摄像头:capture.open(0); (2) 实例的同时进行初始化 VideoCapture capture("1.avi"); //摄像头: VideoCapture capture(0); while(1) { Mat frame; //定义一个Mat变量,用于存储每一帧的图像 captrue>>frame; //读取当前帧 imshow("test",frame); waitKey(33); }
7、定义ROI的两种方法
(1)使用Rect,指定矩形的左上角坐标和矩形的长宽,定义一个矩形区域。
Mat iamgrROI = Image(Rect(x,y,xleng,yleng));
(2)使用Range 指定
Mat iamgrROI = Image(Range(500,500+xleng),Range(250,+yleng));
列子:
Mat img1 = imread(“1.jpg”);
Mat img2 = imread(“2.jpg”);
Mat mask = imread(“2.jpg”);
Mat frameROI = img1(Rect(10, 20, img2.cols, img2.rows));
img2.copyTo(frameROI, mask);
imshow(“ROI”,img1);
waitKey(3000);
8、图像的线性混合(两张图片大小一致)
Mat result_img;
double alpha = 0.5;
double beta = (1 - alpha);
addWeighted(img1,alpha,img2,beta,0.0,result_img);
imshow("线性混合效果图", result_img);
9、滑动条的使用
const int G_maxalpha_value_Slider = 100;
int G_AlphaValue_Slider=50;
double G_AlphaValue;
double G_betaValue;
#define WINDOW_NAME "线性混合"
Mat img_1= imread("2.jpg");
Mat img_2= imread("3.jpg");
Mat img_result;
void on_Trackbar(int) {
G_AlphaValue = (double)G_AlphaValue_Slider / G_maxalpha_value_Slider;
G_AlphaValue = 1.0 - G_AlphaValue;
addWeighted(img_1, G_AlphaValue, img_2, G_AlphaValue, 0.0, img_result);
imshow(WINDOW_NAME, img_result);
}
//mian()中
namedWindow(WINDOW_NAME);
cvCreateTrackbar("bar", WINDOW_NAME,&G_AlphaValue_Slider,G_maxalpha_value_Slider, on_Trackbar);
on_Trackbar(G_AlphaValue_Slider);