
1. OpenCV编译目录2.在程序中测试 OpenCV打开 VC 2019新建一个控制台工程工程名是 test。进行如下属性设置。1 混合图片#includeiostream#includeopencv2/imgcodecs.hpp#includeopencv2/highgui.hpp#includeiostreamusingnamespacecv;//所有 OpenCV 类都在命名空间 cv 下usingnamespacestd;#pragmacomment(lib,opencv_world4140d.lib)//引用引入库opencv_world450d.libintmain(){doublealpha0.5;doublebeta;doubleinput;Mat src1,src2,dst;//创建 Mat 对象 Mat 用于存储图片的矩阵类 dst 用于存放混合后的图片/// Ask the user enter alpha//cout 线性混合 endl;coutinput alpha [0.0-1.0]:;cininput;// We use the alpha provided by the user if it is between 0 and 1if(input0input1){alphainput;}//读取两幅大小必须一样的 JPG 图片src1imread(p1.jpg);src2imread(p2.jpg);if(src1.empty()){coutError loading src1endl;return-1;}if(src2.empty()){coutError loading src2endl;return-1;}beta(1.0-alpha);addWeighted(src1,alpha,src2,beta,0.0,dst);//将图 1 与图 2 线性混合imshow(resultPic,dst);//显示混合后的图片waitKey(0);//等待按键响应后退出 0 改为 5000 就是 5 秒后自动退出return0;}上述代码的功能将图片 p1.jpg 和p2.jpg 两幅图片进行混合它们的大小必须一样。这两幅图片都在工程源码目录下。其中 imread 函数用来读取图片。 addWeighted 函数用于将两张相同大小、 相同类型的图片进行融合第二个参数 alpha 表示第一幅图片所占的权重第四个参数 beta 表示第 2 个图片所占的权重。权重越大的图片显示得越多比如我们输入 alpha 为 0.9则主要显示第一幅图片。2 显示图片窗口intmain(void){Mat imgimread(p1.jpg);// 读入当前工程目录下的一幅图片namedWindow(pic);// 创建一个窗口imshow(pic,img);// 在窗口中显示waitKey(6000);// 等待 6000ms 后窗口自动关闭return0;}上述代码的功能imread 函数读取当前工程目录下的 p1.jpg 图片然后函数 namedWindow 创建一个窗口并用函数 imshow 把 test.jpg 在窗口中显示出来。最后用函数 waitKey 等待 6 秒6000毫秒后关闭程序结束。3 数学函数OpenCV 定义了一些新数学函数都在 fast_math.hpp 头文件中。常用的数学函数如下CV_INLINE int cvRound( double value ) //返回跟参数最接近的整数值 四舍五入函数 CV_INLINEint cvFloor( double x ) //近似一个浮点数 x 到不大于 x 的最近的整数即向下 取整 CV_INLINE intcvCeil( double x) //近似一个浮点数 x 到不小于 x 的最近的整数即向上 取整 CV_INLINE intcvIsNaN( double value ) //判断是不是一个数 CV_INLINE int cvIsInf( double value) //判断是否无穷大 CV_INLINE int cvRound(float value) CV_INLINE int cvRound(int value ) CV_INLINE int cvFloor( float value ) CV_INLINE intcvFloor( int value ) CV_INLINE int cvCeil( float value ) CV_INLINE intcvCeil( int value ) CV_INLINE int cvIsNaN( float value )//判断输入值是否为一个数字 CV_INLINE int cvIsInf( float value ) //判断一个数字是否为无穷大虽然标准 C 函数也有类似功能的函数但在某些场合中使用这些函数工作起来比标准 C 函数操作起来还要快。#includeiostream#includeopencv2/opencv.hpp#includeopencv2/core/utils/logger.hppusingnamespacecv;//所有 OpenCV 类都在命名空间 cv 下usingnamespacestd;intmain(){cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);coutcvRound(2.5) : cvRound(2.5)endl;coutcvRound(2.6) : cvRound(2.6)endl;coutcvRound(2.8) : cvRound(2.8)endl;coutcvFloor(2.5) : cvFloor(2.5)endl;coutcvFloor(2.6) : cvFloor(2.6)endl;coutcvCeil(2.5) : cvCeil(2.5)endl;coutcvCeil(2.6) : cvCeil(2.6)endl;waitKey(0);return0;}