当前位置: 首页 > news >正文

四川省江油市建设局网站天津网站的建设

四川省江油市建设局网站,天津网站的建设,制作人是做什么的,在线网站域名whois查询工具效果图◕‿◕✌✌✌#xff1a;opencv人脸识别效果图(请叫我真爱粉) 先看一下效果图勾起你的兴趣#xff01; 文章目录#xff1a; 一#xff1a;环境配置搭建 二#xff1a;图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h …  效果图◕‿◕✌✌✌opencv人脸识别效果图(请叫我真爱粉) 先看一下效果图勾起你的兴趣  文章目录 一环境配置搭建 二图像 1.图像读取与显示 main.cpp  运行结果 2.图像色彩空间转换 2.1 换色彩  test.h  test.cpp main.cpp   运行结果 2.2 照片换背景 test.h        test.cpp        main.cpp        运行结果        3.图像对象的创建Mat test.h test.cpp  main.cpp 运行结果 4.图像像素  4.1 图像像素的读写 test.h        test.cpp    main.cpp      运行结果 4.2 图像像素的算术操作 test.h        test.cpp        main.cpp        运行结果        4.3 图像像素的逻辑操作或 与 非 异或 test.h        test.cpp        main.cpp        运行结果        4.4 图像像素值统计 test.h test.cpp        main.cpp        运行结果        4.5 图像像素类型的转换与归一化 test.h        test.cpp        main.cpp        运行结果        5.图像通道分离与合并与混合 test.h        test.cpp        main.cpp        运行结果        6.图像的放缩与差值 test.h        test.cpp        main.cpp        运行结果        7.图像的旋转 7.1 定义好的角度 test.h        test.cpp        main.cpp        运行结果 7.2 自定义角度 原理  test.h        test.cpp        main.cpp        运行结果        8.图像模糊 8.1 图像卷积操作 test.h test.cpp        main.cpp        运行结果        8.2 高斯模糊 test.h test.cpp        main.cpp        运行结果        8.3 高斯双边模糊 test.h test.cpp        main.cpp        运行结果        三颜色 1.颜色表操作 test.h        test.cpp        main.cpp        运行结果        2.随机数与随机颜色 test.h        test.cpp        main.cpp        运行结果        四事件响应  1.滚动条  1.1 滚动条调整图像亮度 test.h        test.cpp        main.cpp        运行结果    1.2 滚动条参数传递(亮度和对比度) test.h        test.cpp        main.cpp        运行结果        2.键盘响应 test.h        test.cpp        main.cpp        运行结果        3.鼠标响应 test.h        test.cpp        main.cpp        运行结果        五图形 1.图像几何形状绘制 test.h        test.cpp        main.cpp        运行结果        2.多边形填充与绘制 test.h        test.cpp        main.cpp        运行结果        六视频 1.视频文件摄像头使用 test.h        test.cpp        main.cpp        运行结果        2.视频处理与保存 test.h        test.cpp        main.cpp        运行结果        七直方图 1.图像的直方图 test.h        test.cpp        main.cpp        运行结果        2.二维2D直方图 test.h        test.cpp        main.cpp        运行结果        3.直方图的均衡化 test.h        test.cpp        main.cpp        运行结果        Opencv4基于C的 实时人脸检测 来源 OpenCV4 C 快速入门视频30讲 - 系列合集 10小时        资源-sorce-cpp 评价 讲的如何老师讲的很好有干货看这门课最好有点点基础没有基础细心的花点时间仔细学也是可以看懂的启示作为入门课程的确可以打开我们一些眼界有点新鲜有点意思我的笔记含注解知识点分类我是怎么学的我是零基础基本上先看代码自己一行一行的看不懂的看老师怎么讲再百度看那个看笔记看test.cpp就可以了里面都是正在的封装功能函数每个知识点可以干什么我都运行出来了可以更加直观的看效果 学多久别看这个课时10来个小时但是下载软件配置环境理解代码敲代码我花了2.5天如果你们不敲代码可能就会快很多的 我的代码点我查看  学习路线  入门OpenCV图象读写、视频读写、基本像素处理、色彩空间转化初级OpenCV图象卷积处理、二值图象分析、形态学处理、视频分析中级OpenCV图象特征提取与应用、深度神经网络,机器学习高级Pytorch深度学习、OpenVINO开发、torchvision对象检测框架tensorflow对象检测框架、模型从设计、训练、部署一环境配置搭建 OpenCV4基于C基础入门笔记OpenCV环境配置搭建 进入“资源属性管理器如”何返回“解决方案资源管理器”点击窗口——重置窗口布局——是注 释: CTRLKC 取消注释: CTRLKU 二图像 1.图像读取与显示 main.cpp  //知识点 IM表示图片//读取图像imread//显示图像imshow#includeopencv2/opencv.hpp #includeiostreamusing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_GRAYSCALE); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在); return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果 2.图像色彩空间转换 2.1 换色彩  test.h  #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge); }; test.cpp 这里需要包含工程的目录点击工程名TestOpenCV右键属性——VC目录——包含目录F:\VC2015\TestOpenCV\TestOpenCV #includetest.h//色彩转换 void QuickDemo::colorSpace_Demo(Mat image) {Mat a, b; //定义2个矩阵类的图像a和bcvtColor(image, b, COLOR_BGR2HSV); //图像转换函数可以把image转成b第三个参数是转成的类型 COLOR_BGR2HSV 40BGR到HSVcvtColor(image, a, COLOR_BGR2GRAY); //图像转换函数可以把image转成a第三个参数是转成的类型 COLOR_BGR2GRAY 6彩色到灰度imshow(HSV, b);imshow(灰度, a);//保存图片前面是保存图的地址后面是保存图的名称imwrite(F:/images/hsv.jpg, b); imwrite(F:/images/gray.jpg, a); } main.cpp   //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度 黑色轮廓线条细致//COLOR_GRAY2BGR 8灰度到彩色 //COLOR_BGR2HSV 40BGR到HSV 黑白抠图 //COLOR_HSV2BGR 54HSV到BGR 黑色轮廓线条粗略//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换qd.colorSpace_Demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果 2.2 照片换背景 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);};test.cpp        #includetest.h//图像色彩空间转换//RGB色彩空间//HSV色彩空间//YUV色彩空间//YCrCb色彩空间//色彩空间转换cvtColor输入图像输出图像转换的颜色空间类型//提取指定色彩范围区域inRange输入图像最小值最大值提取指定范围的像素void QuickDemo::inrange_demo(Mat image) //可以替换照片背景可以从ps相关来理解 {Mat hsv;cvtColor(image, hsv, COLOR_BGR2HSV); //色彩空间转换Mat mask;//自己的照片背景颜色【去除】//inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask); //绿色inRange(hsv, Scalar(100, 43, 46), Scalar(124, 255, 255), mask); //绿色imshow(mask, hsv); //原图Mat redback Mat::zeros(image.size(), image.type());//需要替换的背景颜色【替换】//redback Scalar(40, 40, 200); //红色redback Scalar(230, 20, 20); //蓝色bitwise_not(mask, mask); //取反 黑白版图根据颜色去背景去掉背景色(无颜色)抠出人物(人物颜色不一样)imshow(mask, mask); image.copyTo(redback, mask); //蒙版之后的图换背景背景颜色人物图实图 imshow(roi区域提取, redback); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换qd.inrange_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; }运行结果        3.图像对象的创建Mat test.h #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge); };test.cpp  #includetest.h//图像对象的创建 void QuickDemo::mat_creation_demo(Mat image) {Mat m1, m2;m1 image.clone();image.copyTo(m2); //复制//创建空白图像 oneszeros是初始化的方法Mat m3 Mat::ones(Size(400,400), CV_8UC3); //创建400*400的CV8位的无符号uUnsigned char通道为n3数据的宽度和长度是由通道数决定的m3 Scalar(255, 0, 0);//改变m3的颜色为蓝色//用来查看宽度高度与通道数/*std::cout width:m3.colsheight m3.rows channelsm3.channels() std::endl;std::cout m3 std::endl;*/Mat m4 m3.clone(); //克隆//m3.copyTo(m4); //把M3赋值给M4M4就是蓝色m4 Scalar(0, 255, 255);//改变m4的颜色为黄色//这里还有其他的//Mat m3 m4; //赋值//Mat kernel (Mat_char(3,3) 0, -1, 0,-1,5,-1,0,-1,-1 );imshow(图像3, m3); //标题和图像名称 显示图像m3 纯蓝色imshow(图像4, m4); //标题和图像名称 } main.cpp //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建qd.mat_creation_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果 4.图像像素  4.1 图像像素的读写 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针 };test.cpp    #includetest.h//图像像素的读写 第一种是数组访问模式 void QuickDemo::pixel_visit_demo1(Mat image) {int dims image.channels();int h image.rows;int w image.cols;for (int row 0; row h; row){for (int col 0; col w; col){if (dims 1) //单通道的灰度图像{int pv image.atuchar(row, col); //得到像素值image.atuchar(row, col) 255 - pv;//给像素值重新赋值}if (dims 3) //三通道的彩色图像{Vec3b bgr image.atVec3b(row, col); //opencv特定的类型获取三维颜色3个值image.atVec3b(row, col)[0] 255 - bgr[0];image.atVec3b(row, col)[1] 255 - bgr[1];image.atVec3b(row, col)[2] 255 - bgr[2];//对彩色图像读取它的像素值并且对像素值进行改写。}}}namedWindow(像素读写演示, WINDOW_FREERATIO);imshow(像素读写演示, image); }//图像像素的读写 第二种为指针访问模式 void QuickDemo::pixel_visit_demo2(Mat image) {int dims image.channels();int h image.rows;int w image.cols;for (int row 0; row h; row){uchar *current_row image.ptruchar(row);for (int col 0; col w; col){if (dims 1) //单通道的灰度图像{int pv *current_row; //得到像素值*current_row 255 - pv; //给像素值重新赋值}if (dims 3) //三通道的彩色图像{*current_row 255 - *current_row; //指针每做一次运算就向后移动一位*current_row 255 - *current_row;*current_row 255 - *current_row;}}}namedWindow(像素读写演示, WINDOW_FREERATIO);imshow(像素读写演示, image);}main.cpp      //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组qd.pixel_visit_demo2(src); //指针waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果 4.2 图像像素的算术操作 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);};test.cpp        #includetest.h//图像像素的算术操作 void QuickDemo::operators_demo(Mat image) {Mat dst Mat::zeros(image.size(), image.type());Mat m Mat::zeros(image.size(), image.type());dst image - Scalar(50, 50, 50); //素点减50m Scalar(50, 50, 50);//下面是内部的函数调用add(image, m, dst); //加法操作 apiimshow(加法操作, dst);namedWindow(加法操作, WINDOW_FREERATIO);//subtract(image, m, dst); //减法操作 api//imshow(减法操作, dst);//multiply(image, m, dst); //乘法操作 api//imshow(乘法操作, dst);//divide(image, m, dst); //除法操作 api//imshow(除法操作, dst);// //加法操作底层 // int dims image.channels(); // int h image.rows; // int w image.cols; // for (int row 0; row h; row) // { // for (int col 0; col w; col) // { // Vec3b p1 image.atVec3b(row, col); //opencv特定的类型获取三维颜色3个值 // Vec3b p2 m.atVec3b(row, col); // dst.atVec3b(row, col)[0] saturate_castuchar(p1[0] p2[0]); //saturate_cast用来防爆小于0就是0大于255就是255 // dst.atVec3b(row, col)[1] saturate_castuchar(p1[1] p2[1]); // dst.atVec3b(row, col)[2] saturate_castuchar(p1[2] p2[2]); //对彩色图像读取它的像素值并且对像素值进行改写。 // } // } // imshow(加法操作, dst); // }main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作qd.operators_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        4.3 图像像素的逻辑操作或 与 非 异或 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);};test.cpp        #includetest.h//图像像素的逻辑操作 void QuickDemo::bitwise_demo(Mat image) {Mat m1 Mat::zeros(Size(256, 256), CV_8UC3);Mat m2 Mat::zeros(Size(256, 256), CV_8UC3);//图像形状大小位置颜色线宽(0表示绘制 0表示填充)线条样式逆时针方向//颜色B G Rrectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);imshow(m1, m1);imshow(m2, m2);Mat dst;bitwise_and(m1, m2, dst); //位操作与bitwise_or(m1, m2, dst); //位操作或bitwise_not(image, dst); //取反操作bitwise_xor(m1, m2, dst); //异或操作imshow(像素位操作, dst); }main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作qd.bitwise_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        4.4 图像像素值统计 test.h #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);};test.cpp        #includetest.h//图像像素值统计//最小(min)//最大(max)//均值(mean)//标准方差(standard deviation)//最大最小值minMaxLoc//计算均值与标准方差meanStdDevvoid QuickDemo::pixel_statistic_demo(Mat image) {double minv, maxv; //定义最值Point minLoc, maxLoc; //定义最值地址std::vectorMatmv; //mv是一个Mat类型的容器 装在这个容器内split(image, mv);for (int i 0; i mv.size(); i){//求出图像的最大值和最小值minMaxLoc(mv[i], minv, maxv, minLoc, maxLoc, Mat()); std::cout 通道: i 最小值: minv 最大值: maxv std::endl;}Mat mean, stddev;//求出图像的均值和方差Mat redback Mat::zeros(image.size(), image.type());/* redback Scalar(40, 40, 200);meanStdDev(redback, mean, stddev);imshow(redback, redback);*/meanStdDev(image, mean, stddev); std::cout 均值: mean std::endl;std::cout 方差: stddev std::endl; } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计qd.pixel_statistic_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        4.5 图像像素类型的转换与归一化 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);};test.cpp        #includetest.h//图像像素类型的转换与归一化//将图像或图像中的某个区域如ROI的像素值范围缩放到0到1之间或者根据需要缩放到指定的范围//这是一种常用的图像预处理步骤可以用于图像的对比度拉伸、色彩均衡、直方图均衡化等操作//归一化类型有四种分别是NORM_L2、NORM_L1、NORM_INF、NORM_MINMAX12// NORM_L2默认值。计算L2范数使用欧几里得距离// NORM_L1计算L1范数即绝对值之和// NORM_INF计算最大元素的绝对值// NORM_MINMAX将像素值缩放到[0, 1]的范围内 void QuickDemo::norm_demo(Mat image) {Mat dst;//打印出来图片的类型std::cout image.type() std::endl; //将dst数据转换成浮点型float32位数据image.convertTo(image, CV_32F);std::cout image.type() std::endl;//图像进行归一化操作输入图像输出图像缩放因子-通常取值为1.0偏移量-通常取值为0.0归一化的类型normalize(image, dst, 1.0,0.0, NORM_MINMAX);std::cout dst.type() std::endl;imshow(图像的归一化, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化qd.norm_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        5.图像通道分离与合并与混合 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);};test.cpp        #includetest.h//通道的分离与合并 void QuickDemo::channels_demo(Mat image) {//容器std::vectorMatmv;//1.通道分离split(image, mv);//0,1,2三个通道分别代表BGR//imshow(蓝色, mv[0]);//imshow(绿色, mv[1]);//imshow(红色, mv[2]);Mat dst;//选择一个通道打开其他关闭mv[0] 0;mv[2] 0;//2.通道合并merge(mv, dst);imshow(蓝色, dst);//3.通道混合int from_to[] { 0,2,1,1,2,0 }; //两两依次一组mixChannels(image, 1, dst, 1, from_to, 3); //3表示3个通道imshow(通道混合, dst); }main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并qd.channels_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        6.图像的放缩与差值 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);};test.cpp        #includetest.h//图像的放缩与差值 void QuickDemo::resize_demo(Mat image) {Mat zoomin, zoomout;int h image.rows;int w image.cols;//调整大小的图像,是否需要缩小图像,新的图像大小,在缩小图像时要在哪个位置开始采样,在缩小图像时要在哪个位置开始采样,插值方法//resize(image, zoomin, Size(w/2, h/2), 0, 0, INTER_LINEAR);//imshow(zoomin, zoomin);resize(image, zoomout, Size(w*3 , h*3), 0, 0, INTER_LINEAR);imshow(zoomin, zoomout); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值qd.resize_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        7.图像的旋转 7.1 定义好的角度 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);}; test.cpp        #includetest.h//图像的旋转定义好的 void QuickDemo::flip_demo(Mat image) {Mat dst;flip(image, dst, 0);//上下翻转 x对称flip(image, dst, 1);//左右翻转 y对称flip(image, dst, -1);//旋转180°imshow(图像翻转, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的qd.flip_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果 7.2 自定义角度 原理  旋转矩阵的第三个元素是0这是因为在2D平面中进行旋转时图像在Z轴上的位置没有变化  test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);}; test.cpp        #includetest.h//图像的旋转自定义 void QuickDemo::rotate_demo(Mat image) {Mat dst, M; //用于存储旋转后的图像和旋转矩阵int h image.rows; //定义输入图片的高度int w image.cols; //定义输入图片的宽度//旋转矩阵//2D旋转的变换矩阵图像的中心点,旋转的角度(单位是度),旋转的缩放因子(1.0表示不进行缩放)M getRotationMatrix2D(Point(w / 2, h / 2), 45, 1.0);//矩阵旋转获取角度 旋转矩阵是一个2x3的矩阵//旋转矩阵的第三个元素是0这是因为在2D平面中进行旋转时图像在Z轴上的位置没有变化//[cos(angle) sin(angle) 0]//[-sin(angle) cos(angle) 0]// 获取旋转矩阵的第一行第一列元素的绝对值即cos(45度)double cos abs(M.atdouble(0, 0)); // 获取旋转矩阵的第一行第二列元素的绝对值即sin(45度)double sin abs(M.atdouble(0, 1));//这里怎么算的我放了张图// 根据旋转矩阵的元素计算旋转后的图像的宽度等于cos(45度)*原宽度sin(45度)*原高度int nw cos * w sin * h;// 根据旋转矩阵的元素计算旋转后的图像的高度等于sin(45度)*原宽度cos(45度)*原高度int nh sin * w cos * h;// 将旋转矩阵的第三列的第一项加上(旋转后的图像宽度的一半减去原图像宽度的一半)以调整旋转后的图像的中心位置M.atdouble(0, 2) (nw / 2 - w / 2);// 将旋转矩阵的第三列的第二项加上(旋转后的图像高度的一半减去原图像高度的一半)以调整旋转后的图像的中心位置M.atdouble(1, 2) (nh / 2 - h / 2);//图像进行放射变换:输入图像,输出图像,仿射变换矩阵(决定了图像的变换方式),输出图像的大小,双线性插值法,无填充0表示无颜色合成,填充颜色warpAffine(image, dst, M, Size(nw, nh), INTER_LINEAR, 0, Scalar(255, 255, 0));imshow(旋转演示, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义qd.rotate_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        8.图像模糊 blur图像模糊、GaussianBlur高斯模糊和bilateralFilter的高斯双边模糊区别blur 图像模糊即普通的模糊对图像进行相同像素之间的融合得到整个图像都模糊的效果GaussianBlur 高斯模糊图像整体都变模糊边缘信息丢失严重bilateralFilter 高斯双边模糊图像边缘清晰中间部分有一定程度的模糊边缘信息得以保留 8.1 图像卷积操作 test.h #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);//图像直方图void QuickDemo::histogram_demo(Mat image);//二维直方图void QuickDemo::histogram_2d_demo(Mat image);//直方图的均衡化void QuickDemo::histogram_eq_demo(Mat image);//图像卷积操作void QuickDemo::blur_demo(Mat image);}; test.cpp        #includetest.h//图像卷积操作 void QuickDemo::blur_demo(Mat image) {Mat dst;//原始图像卷积之后的图像卷积的矩阵大小卷积的起始点blur(image, dst, Size(15, 15), Point(-1, -1));imshow(图像卷积操作 图像模糊, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存//qd.video_demo2(src);//图像直方图//qd.histogram_demo(src);//二维直方图//qd.histogram_2d_demo(src);//直方图的均衡化//qd.histogram_eq_demo(src);//图像卷积操作qd.blur_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        8.2 高斯模糊 test.h #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);//图像直方图void QuickDemo::histogram_demo(Mat image);//二维直方图void QuickDemo::histogram_2d_demo(Mat image);//直方图的均衡化void QuickDemo::histogram_eq_demo(Mat image);//图像卷积操作void QuickDemo::blur_demo(Mat image);//高斯模糊void QuickDemo::gaussian_blur_demo(Mat image);}; test.cpp        #includetest.h//高斯模糊 void QuickDemo::gaussian_blur_demo(Mat image) {Mat dst;//初始图像,处理后的图像,高斯矩阵大小,sigmaX在X方向上的标准偏差-控制了模糊的程度和模糊的方向//较大的sigmaX值会导致更宽的模糊效果而较小的值则会产生更锐利的模糊效果GaussianBlur(image, dst, Size(0, 0), 15);imshow(高斯模糊, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存//qd.video_demo2(src);//图像直方图//qd.histogram_demo(src);//二维直方图//qd.histogram_2d_demo(src);//直方图的均衡化//qd.histogram_eq_demo(src);//图像卷积操作//qd.blur_demo(src);//高斯模糊qd.gaussian_blur_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        8.3 高斯双边模糊 test.h #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);//图像直方图void QuickDemo::histogram_demo(Mat image);//二维直方图void QuickDemo::histogram_2d_demo(Mat image);//直方图的均衡化void QuickDemo::histogram_eq_demo(Mat image);//图像卷积操作void QuickDemo::blur_demo(Mat image);//高斯模糊void QuickDemo::gaussian_blur_demo(Mat image);//高斯双边模糊void QuickDemo::bifilter_demo(Mat image);}; test.cpp        #includetest.h//高斯双边模糊 void QuickDemo::bifilter_demo(Mat image) {Mat dst;//输入图像,输出图像,滤波过程中像素之间的距离,颜色空间中的标准偏差,像素空间中的标准偏差bilateralFilter(image, dst, 0, 100, 10);imshow(高斯双边模糊, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存//qd.video_demo2(src);//图像直方图//qd.histogram_demo(src);//二维直方图//qd.histogram_2d_demo(src);//直方图的均衡化//qd.histogram_eq_demo(src);//图像卷积操作//qd.blur_demo(src);//高斯模糊//qd.gaussian_blur_demo(src);//高斯双边模糊qd.bifilter_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        三颜色 1.颜色表操作 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);};test.cpp        #includetest.h//opencv自带颜色操作 void QuickDemo::color_style_demo(Mat image) {//各种色彩int colormap[] {COLORMAP_AUTUMN ,COLORMAP_BONE,COLORMAP_CIVIDIS,COLORMAP_DEEPGREEN,COLORMAP_HOT,COLORMAP_HSV,COLORMAP_INFERNO,COLORMAP_JET,COLORMAP_MAGMA,COLORMAP_OCEAN,COLORMAP_PINK,COLORMAP_PARULA,COLORMAP_RAINBOW,COLORMAP_SPRING,COLORMAP_TWILIGHT,COLORMAP_TURBO,COLORMAP_TWILIGHT,COLORMAP_VIRIDIS,COLORMAP_TWILIGHT_SHIFTED,COLORMAP_WINTER};Mat dst;int index 0;while (true){char c waitKey(100); //停顿100ms 做视频处理都是1if (c 27) { //esc 退出应用程序break;}if (c 49) //key#1 按下按键1时保存图片到指定位置{std::cout 你按下了 #1 std::endl;imwrite(F:/images/gray.jpg, dst);}applyColorMap(image, dst, colormap[index % 19]); //循环展示19种图片 (输入图像输出图像匹配颜色)index;imshow(循环播放, dst);} }main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作qd.color_style_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        颜色不停自动变换    2.随机数与随机颜色 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();}; test.cpp        #includetest.h//随机数与随机颜色 void QuickDemo::random_drawing() {Mat canvas Mat::zeros(Size(512, 512), CV_8UC3);int w canvas.cols;int h canvas.rows;//初始化RNG rng(2);while (true){int c waitKey(10);if (c 27){break;}//rng.uniform(low, high)将生成一个在范围[low, high)内的均匀分布的随机数int x1 rng.uniform(0, canvas.cols);int y1 rng.uniform(0, h);int x2 rng.uniform(0, canvas.cols);int y2 rng.uniform(0, h);int b rng.uniform(0, 255);int g rng.uniform(0, 255);int r rng.uniform(0, 255);canvas Scalar(0, 0, 0);line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 8, LINE_AA, 0); imshow(随机绘制演示, canvas);} } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色qd.random_drawing();waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        不停移动变换颜色  四事件响应  1.滚动条  1.1 滚动条调整图像亮度 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo(Mat image); };test.cpp        #includetest.h//滚动条调整图像亮度 Mat src, dst, m; int lightness 50; //定义初始的亮度为50 static void on_track(int, void*) {m Scalar(lightness, lightness, lightness);//创建调整亮度的数值subtract(src, m, dst); //定义亮度变化为——减imshow(亮度调整, dst); //显示调整亮度之后的图片 } void QuickDemo::tracking_bar_demo(Mat image) {namedWindow(亮度调整, WINDOW_AUTOSIZE);dst Mat::zeros(image.size(), image.type());//图片的初始化创建一个和image大小相等种类相同的图像m Mat::zeros(image.size(), image.type());//图片的初始化创建一个和image大小相等种类相同的图像src image; //给src赋值int max_value 100; //定义最大值为100createTrackbar(Value Bar:, 亮度调整, lightness, max_value, on_track);//调用函数实现功能。on_track(50, 0); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度qd.tracking_bar_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果    1.2 滚动条参数传递(亮度和对比度) test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);};test.cpp        #includetest.h//滚动条参数传递(亮度和对比度) static void on_lightness(int b, void* userdata)//亮度 目标图像 {Mat image *((Mat*)userdata);Mat dst Mat::zeros(image.size(), image.type());Mat m Mat::zeros(image.size(), image.type());m Scalar(b, b, b);//第一个图像 第一个图像的权重 第二个图像 第二个图像的权重 加到权重总和上的标量值 目标图像addWeighted(image, 1.0, m, 0, b, dst); //融合两张图imshow(亮度对比度调整, dst); } static void on_contrast(int b, void* userdata) //对比度 目标图像 {Mat image *((Mat*)userdata);Mat dst Mat::zeros(image.size(), image.type());Mat m Mat::zeros(image.size(), image.type());double contrast b / 100.0;addWeighted(image, contrast, m, 0.0, 0, dst);//融合两张图imshow(亮度对比度调整, dst); } void QuickDemo::tracking_bar_demo2(Mat image) {namedWindow(亮度对比度调整, WINDOW_AUTOSIZE);int lightness 50;int max_value 100;int contrast_value 100;// 取名 窗口名 滑块初始值 滚动的最大值 接收回调函数 用户传给回调函数的数据createTrackbar(Value Bar:, 亮度对比度调整, lightness, max_value, on_lightness, (void*)(image));createTrackbar(Contrast Bar:, 亮度对比度调整, contrast_value, 200, on_contrast, (void*)(image));on_lightness(50, image); }main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)qd.tracking_bar_demo2(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        2.键盘响应 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);};test.cpp        #includetest.h//键盘响应 void QuickDemo::key_demo(Mat image) //先要鼠标点击图片再按键盘 {Mat dst Mat::zeros(image.size(), image.type());while (true){char c waitKey(100);//停顿100ms 做视频处理都是1if (c 27) { //esc 退出应用程序break;}if (c 49)//key#1{std::cout 你按下了 #1 std::endl;cvtColor(image, dst, COLOR_BGR2GRAY);}if (c 50)//key#2{std::cout 你按下了 #2 std::endl;cvtColor(image, dst, COLOR_BGR2HSV);}if (c 51)//key#3{std::cout 你按下了 #3 std::endl;dst Scalar(50, 50, 50);add(image, dst, dst);}imshow(键盘响应, dst);std::cout c std::endl;} }main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应qd.key_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        3.鼠标响应 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);};test.cpp        #includetest.h//鼠标操作与响应Point sp(-1, -1);//鼠标的开始的位置Point ep(-1, -1);//鼠标放下的位置Mat temp;//处理绘图事件:事件,x 和 y表示鼠标的坐标位置,标志或状态信息,指向用户数据的指针 static void on_draw(int event, int x, int y, int flags, void *userdata) //event表示发生的事件类型 // EVENT_MOUSEMOVE鼠标移动 // EVENT_LBUTTONDOWN鼠标左键按下 // EVENT_RBUTTONDOWN鼠标右键按下 {//获取用户数据Mat image *((Mat*)userdata);if (event EVENT_LBUTTONDOWN) //如果鼠标的左键按下 显示起点 {sp.x x;sp.y y;std::cout 起点 sp std::endl;}else if (event EVENT_LBUTTONUP) //鼠标左键弹起事件 在新窗口显示图{ep.x x;ep.y y;int dx ep.x - sp.x;int dy ep.y - sp.y;if (dx 0 dy 0){//区域Rect box(sp.x, sp.y, dx, dy); //绘制一个窗口盒子rectangle(image, box, Scalar(0, 0, 255), 2, 8, 0);imshow(截取显示区域窗口, image(box));//复位为下一次做准备sp.x -1;sp.y -1;}}else if (event EVENT_MOUSEMOVE) //鼠标移动 在原图附件上面取图{if (sp.x 0 sp.y 0){ep.x x;ep.y y;int dx ep.x - sp.x;int dy ep.y - sp.y;if (dx 0 dy 0){//截取绘制区域Rect box(sp.x, sp.y, dx, dy);//在原图附件上显示绘制的矩形rectangle(image, box, Scalar(0, 0, 255), 2, 8, 0);imshow(鼠标绘制, image);//复制到temp.copyTo(image);}}} } void QuickDemo::mouse_drawing_demo(Mat image) {//自动调整大小的窗namedWindow(鼠标绘制, WINDOW_AUTOSIZE);//窗口的名称,回调函数,指向void的指针setMouseCallback(鼠标绘制, on_draw, (void*)(image));//原图附件imshow(鼠标绘制, image);//克隆显示从原图附件截取的图片 克隆 到新建窗口 main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应qd.mouse_drawing_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        五图形 1.图像几何形状绘制 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);};test.cpp        #includetest.h//图像几何形状的绘制 void QuickDemo::drawing_demo(Mat image) {//矩形// Rect rect;// rect.x 30;// rect.y 90;// rect.width 50;// rect.height 50;// //输入图像矩形对象颜色线条宽度线条类型填充方式(0不填充)// rectangle(image, rect, Scalar(255, 0, 0), 6, 8, 0);// imshow(图形的绘制, image);圆形 // //输入图像,圆的中心点坐标(以像素为单位),圆的半径,颜色,线条宽度,线条类型,填充方式// circle(image, Point(50, 90), 15, Scalar(255, 0, 0), 2, LINE_AA, 0);// imshow(图形的绘制, image);对两个图像进行加权合并// Mat dst;// Mat bg Mat::zeros(image.size(), image.type());// //输入图像,图像的权重(取值范围为[0,1]),输入图像,图像的权重(取值范围为[0,1]),像素值的加权和(范围为[-128,127]),输出图像// addWeighted(image, 0.7, bg, 0.3, 0, image);// imshow(图形的绘制, image);直线// //输入图像起点终点颜色线条宽度线条类型填充方式// line(image, Point(10, 50), Point(100, 50), Scalar(0, 0, 255), 8, LINE_AA, 0);// imshow(图形的绘制, image);//椭圆RotatedRect rtt;//指定椭圆的位置、大小和方向rtt.center Point(90, 90);rtt.size Size(20, 50);rtt.angle 0.0;//输入图像位置 大小 方向颜色线条宽度线条类型ellipse(image, rtt, Scalar(0, 0, 255), 2, 8);imshow(图形的绘制, image);} main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制qd.drawing_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        2.多边形填充与绘制 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);};test.cpp        #includetest.h//多边形填充与绘制 void QuickDemo::polyline_drawing_demo(Mat image) {Mat canvas Mat::zeros(Size(512, 512), CV_8UC3);//各个点Point p1(100, 100);Point p2(350, 100);Point p3(450, 280);Point p4(320, 450);Point p5(80, 400);//写入到容器std::vectorPointpts;pts.push_back(p1);pts.push_back(p2);pts.push_back(p3);pts.push_back(p4);pts.push_back(p5);//绘制多边形轮廓填充[只能填充]地方包含多线段顶点坐标的数组颜色线段绘制方式对齐坐标的位数//fillPoly(canvas, pts, Scalar(122, 155, 255), 8, 0);//绘制多边形轮廓地方包含多线段顶点坐标的数组线段是否封闭颜色线宽线段绘制方式对齐坐标的位数//polylines(canvas, pts, true, Scalar(0, 0, 255), 2, 8, 0);std::vectorstd::vectorPointcontours;//把各个点导入数组contours.push_back(pts);//绘制多边形轮廓填充[能填充还可以绘制]:地方包含多线段顶点坐标的数组-1表示填充(正表示多边形的绘制 为负表示多边形的填充)轮廓的颜色轮廓的线宽drawContours(canvas, contours, -1, Scalar(0, 0, 255), -1);imshow(多边形绘制, canvas); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制qd.polyline_drawing_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        六视频 1.视频文件摄像头使用 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo(Mat image);}; test.cpp        #includetest.h//视频文件摄像头使用 void QuickDemo::video_demo(Mat image) {//读取视频的地址VideoCapture capture(F:/images/beauty.mp4); Mat frame;while (true){//读取视频capture.read(frame); if (frame.empty()){break;}//图像镜像操作左右翻转//flip(frame, frame, 1);imshow(视频播放, frame);//对视频调用之前的demo:色彩转换//colorSpace_Demo(frame);//控制速度int c waitKey(10);if (c 27) { //esc 退出应用程序break;}}//释放相机的资源capture.release(); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用qd.video_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        2.视频处理与保存 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);}; test.cpp        #includetest.h//视频处理与保存 void QuickDemo::video_demo2(Mat image) {//读取视频的地址VideoCapture capture(F:/images/beauty.mp4);int frame_width capture.get(CAP_PROP_FRAME_WIDTH); //获取视频的宽度int frame_height capture.get(CAP_PROP_FRAME_HEIGHT); //获取视频的高度int count capture.get(CAP_PROP_FRAME_COUNT); //视频总的帧数 double fps capture.get(CAP_PROP_FPS); //获取帧率std::cout 宽度 frame_width std::endl;std::cout 高度 frame_height std::endl;std::cout 帧数 count std::endl;std::cout 帧率 fps std::endl;//保存地址,获取图片的格式,图片的帧数,视频宽高,真VideoWriter writer(F:/images/test.mp4, capture.get(CAP_PROP_FOURCC), fps, Size(frame_width, frame_height), true);Mat frame;while (true){//读取视频capture.read(frame);if (frame.empty()){break;}//图像镜像操作左右翻转//flip(frame, frame, 1);imshow(视频播放, frame);//对视频调用之前的demo:色彩转换//colorSpace_Demo(frame);//控制速度int c waitKey(30);if (c 27) { //esc 退出应用程序break;}}capture.release(); //释放相机的资源writer.release(); //释放存放的资源 } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存qd.video_demo2(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        七直方图 1.图像的直方图 图像直方图的解释将一幅图像的每个通道的像素强度分布以直方图的形式展现出来便于观察和分析图像的亮度分布特征是一种用于计算机视觉和图像识别的特征描述符直方图主要基于图像局部方块的边缘方向直方图它将图像划分为小的细胞单元每个细胞单元包含9个方向的边缘强度然后将这些边缘强度分布即直方图组合起来形成整个图像的直方图这个直方图描述了图像中物体的形状信息广泛地应用于图像处理的各个领域特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类、反向投影跟踪分类灰度直方图颜色直方图优缺点直方图的优点是图像平移、旋转、缩放不变性它对图像的几何和光照变化具有鲁棒性它能够有效地描述物体的边缘和轮廓信息它对背景噪声不敏感直方图的缺点是直方图通常需要组合许多小块的信息这可能会导致对图像中物体的部分缺失或变形它不能提供物体的空间位置信息直方图的计算复杂度较高作用用于图像分割对于具有双峰性的图像可以利用大津法对图像进行分割这种方法对图像的几何和光照变化具有鲁棒性用于图像识别通过研究质量波动状况之后就能掌握过程的状况从而确定在什么地方集中力量进行质量改进工作用于行人检测如果图像中没有人跟有人的直方图是不同的通过比较两幅图像的直方图可以判断这两幅图像是否相似其他概念Bins是指直方图的大小范围对于像素值取值在0~255之间的最少有256个bin此外还可以有16、32、48、128等256除以bin的大小应该是整数倍直方图归一化是一种图像处理方法可以将直方图的像素分布调整为均匀分布的状态使得图像的对比度得到提升 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);//图像直方图void QuickDemo::histogram_demo(Mat image);}; test.cpp        #includetest.h//图像直方图 void QuickDemo::histogram_demo(Mat image) {// 三通道分离std::vectorMat bgr_plane;//split函数被用于将一个BGR图像即具有三个颜色通道的图像拆分为三个单独的通道每个通道都包含一个单通道的图像split(image, bgr_plane);// 定义参数变量const int channels[1] { 0 };const int bins[1] { 256 }; //存储直方图的bin大小范围float hranges[2] { 0,255 }; //通道的强度范围const float* ranges[1] { hranges };//存储计算得到的直方图Mat b_hist;Mat g_hist;Mat r_hist;// 计算Blue, Green, Red通道的直方图计算图像的直方图//1~4要计算直方图的图像,通道数,直方图的掩膜图像的通道索引,空的掩膜图像(使用掩膜计算直方图的图像区域)//5~8存储计算得到的直方图,直方图的维度是一维,灰度图像的强度值范围为0到255包含每个通道的强度范围数组calcHist(bgr_plane[0], 1, channels, Mat(), b_hist, 1, bins, ranges);//calcHist(bgr_plane[0], 1, 0, Mat(), b_hist, 1, bins, ranges);calcHist(bgr_plane[1], 1, channels, Mat(), g_hist, 1, bins, ranges);calcHist(bgr_plane[2], 1, channels, Mat(), r_hist, 1, bins, ranges);// 显示直方图:创建一个大小为400x512的黑色图像所有像素值初始化为0int hist_w 512; //直方图的每个条形的宽度int hist_h 400; //直方图的高度int bin_w cvRound((double)hist_w / bins[0]); //每个直方图条形的宽度//cvRound()返回跟参数最接近的整数值即四舍五入//cvRound()函数转换为整数以确保绘制的直线端点与像素中心对齐Mat histImage Mat::zeros(hist_h, hist_w, CV_8UC3); //存储创建的直方图图像//将数据类型设置为CV_8UC3。这表示每个像素使用8位无符号整数并且具有三个通道红、绿、蓝// 对每个通道的直方图进行归一化像素均匀分布//1~4输入数组进行归一化的直方图数据,输出数组,归一化的最小值,归一化的最大值//5~7归一化类型(将原始数据线性缩放到指定范围),用于存储归一化后的数据的矩阵,传递给函数作为可选的矩阵参数normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());// 画曲线,将直方图数据可视化绘制出每个通道的直方图并将它们叠加在同一个图像上以展示图像的颜色分布//方法一嵌套for (int i 1; i bins[0]; i) { //在图像上绘制直线line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(b_hist.atfloat(i - 1))), //输入图像起点终点//计算当前bin的横坐标:列表的索引是从0开始的所以需要减去1才能对应到bin的索引//计算当前bin的纵坐标:b_hist.atfloat(i - 1)获取第i个bin的直方图值,将纵坐标取反即从直方图高度减去该值以得到图像中对应的像素位置//在给定的代码中hist_h是直方图的基线即y0的位置是固定的//而cvRound(b_hist.atfloat(i - 1))则是第i个直方图的峰值//因此通过减去cvRound(b_hist.atfloat(i - 1))我们可以将直方图向下移动使其与基线对齐//减去cvRound(b_hist.atfloat(i - 1))是为了将直方图向下移动一定的距离//定位直线起点和终点在图像中的位置 起点 终点颜色线宽为2个像素线类型为8没有像素偏移//通过使用Point对象我们可以方便地指定直线的起点和终点在图像中的准确位置Point(bin_w*(i), hist_h - cvRound(b_hist.atfloat(i))), Scalar(255, 0, 0), 2, 8, 0); //起点终点蓝色line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(g_hist.atfloat(i - 1))),Point(bin_w*(i), hist_h - cvRound(g_hist.atfloat(i))), Scalar(0, 255, 0), 2, 8, 0); //绿色line(histImage, Point(bin_w*(i - 1), hist_h - cvRound(r_hist.atfloat(i - 1))),Point(bin_w*(i), hist_h - cvRound(r_hist.atfloat(i))), Scalar(0, 0, 255), 2, 8, 0); //红色}//方法二这个比较好理解for (int i 0; i 256; i) {Point p01(bin_w * i, hist_h - cvRound(b_hist.atfloat(i)));Point p02(bin_w * i 1, hist_h - cvRound(b_hist.atfloat(i 1)));line(histImage, p01, p02, Scalar(255, 0, 0), 1, 8, 0);Point p11(bin_w * i, hist_h - cvRound(g_hist.atfloat(i)));Point p12(bin_w * i 1, hist_h - cvRound(g_hist.atfloat(i 1)));line(histImage, p11, p12, Scalar(0, 255, 0), 1, 8, 0);Point p21(bin_w * i, hist_h - cvRound(r_hist.atfloat(i)));Point p22(bin_w * i 1, hist_h - cvRound(r_hist.atfloat(i 1))); line(histImage, p21, p22, Scalar(0, 0, 255), 1, 8, 0);}// 显示直方图namedWindow(直方图曲线, WINDOW_AUTOSIZE);imshow(直方图曲线, histImage); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存//qd.video_demo2(src);//图像直方图qd.histogram_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        2.二维2D直方图 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);//图像直方图void QuickDemo::histogram_demo(Mat image);//二维直方图void QuickDemo::histogram_2d_demo(Mat image);}; test.cpp        #includetest.h//二维2D直方图 void QuickDemo::histogram_2d_demo(Mat image) {Mat hsv,hs_hist; //输入输出图像cvtColor(image, hsv, COLOR_BGR2HSV);int hbins 30, sbins 32; //h30行,s32列int hist_bins[] { hbins, sbins }; //直方图的bin数量float h_range[] { 0, 180 };float s_range[] { 0, 256 };const float* hs_ranges[] { h_range, s_range }; //包含每个通道的取值范围的数组//计算一维数组的直方图int hs_channels[] { 0, 1 };//计算一维数组的直方图:1~5:输入图像的指针直方图的通道数包含通道名称的数组存储计算得到的直方图,输出图像即直方// 6~10:直方图的维度-2D,直方图的bin数量,包含每个通道的取值范围的数组,是否将输入图像归一化,是否计算累积分布函数calcHist(hsv, 1, hs_channels, Mat(), hs_hist, 2, hist_bins, hs_ranges, true, false);//存储下面画的矩形double maxVal 0;//这个函数的作用是在给定的数组或矩阵中寻找元素的最大值并返回它们的位置//参数计算最小值和最大值的输入数组或图像,要计算的维度或轴的参数- 0表示在第一个维度,存储计算得到的最大值,范围或边界,范围或边界minMaxLoc(hs_hist, 0, maxVal, 0, 0);int scale 10;//sbins*scale行和hbins*scale列数据类型为CV_8UC3即8位无符号整数每个通道一个Mat hist2d_image Mat::zeros(sbins*scale, hbins * scale, CV_8UC3);//叠加矩形for (int h 0; h hbins; h) {for (int s 0; s sbins; s){//位于横h列s处的频次float binVal hs_hist.atfloat(h, s);//颜色int intensity cvRound(binVal * 255 / maxVal);//画矩形rectangle(hist2d_image, //输入图像Point(h*scale, s*scale), //左上角的坐标Point((h 1)*scale - 1, (s 1)*scale - 1), //右下角的坐标Scalar::all(intensity), //颜色-1); //线条宽度}}//将灰度图像转换为彩色图像以便更好地可视化直方图数据//通过对每个像素应用颜色映射来将灰度值映射为彩色值从而将灰度图像转换为彩色图像//输入的2D直方图图像-通常为灰度图像,输出图像-即应用颜色映射后的图像,颜色映射类型-这里使用的是JET颜色映射applyColorMap(hist2d_image, hist2d_image, COLORMAP_JET);// 显示直方图imshow(二维直方图, hist2d_image);//imwrite(F:/images/zhifangtu.jpg, hist2d_image); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存//qd.video_demo2(src);//图像直方图//qd.histogram_demo(src);//二维直方图qd.histogram_2d_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        3.直方图的均衡化 test.h        #includeopencv2/opencv.hpp using namespace cv;//创建一个QuickDemo对象 class QuickDemo {public://色彩转换void colorSpace_Demo(Mat imge);//图像对象的创建void mat_creation_demo(Mat imge);//图像像素的读写void pixel_visit_demo1(Mat image); //数组void pixel_visit_demo2(Mat image); //指针//图像像素的算术操作void operators_demo(Mat image);//滚动条调整图像亮度void tracking_bar_demo1(Mat image);//滚滚动条参数传递(亮度和对比度)void tracking_bar_demo2(Mat image);//键盘响应void key_demo(Mat image);//opencv自带颜色操作void color_style_demo(Mat image);//图像像素的逻辑操作void bitwise_demo(Mat image);//通道的分离与合并void channels_demo(Mat image);//图像色彩空间转换void inrange_demo(Mat image);//图像像素值统计void pixel_statistic_demo(Mat image);//图像几何形状的绘制void drawing_demo(Mat image);//随机数与随机颜色void QuickDemo::random_drawing();//多边形填充与绘制void QuickDemo::polyline_drawing_demo(Mat image);//鼠标操作与响应void QuickDemo::mouse_drawing_demo(Mat image);//图像像素类型的转换与归一化void QuickDemo::norm_demo(Mat image);//图像的放缩与差值void QuickDemo::resize_demo(Mat image);//图像的旋转定义好的void QuickDemo::flip_demo(Mat image);//图像的旋转自定义void QuickDemo::rotate_demo(Mat image);//视频文件摄像头使用void QuickDemo::video_demo1(Mat image);//视频处理与保存void QuickDemo::video_demo2(Mat image);//图像直方图void QuickDemo::histogram_demo(Mat image);//二维直方图void QuickDemo::histogram_2d_demo(Mat image);//直方图的均衡化void QuickDemo::histogram_eq_demo(Mat image);}; test.cpp        #includetest.h//直方图的均衡化 void QuickDemo::histogram_eq_demo(Mat image) {Mat gray;//图像转换cvtColor(image, gray, COLOR_BGR2GRAY);imshow(灰度图像, gray);Mat dst;//输入输出equalizeHist(gray, dst);imshow(直方图均衡化演示, dst); } main.cpp        //知识点 IM表示图片//读取图像imread//显示图像imshow//色彩空间转换函数(B G R)cvtColor//COLOR_BGR2GRAY 6彩色到灰度//COLOR_GRAY2BGR 8灰度到彩色//COLOR_BGR2HSV 40BGR到HSV//COLOR_HSV2BGR 54HSV到BGR//保存图片imwrite(保存路径内存对象)#includeopencv2/opencv.hpp #includeiostream #includetest.husing namespace std; using namespace cv; int main() {//读取进来的数据以矩阵的形势Mat src imread(F:/images/gril.jpg, IMREAD_ANYCOLOR); //第二个参数代表显示一张灰度图像//看是否是空图片if (src.empty()){printf(图片不存在);return -1;}//创建了一个新窗口超过屏幕的图像无法显示时候调用此函数namedWindow(输入窗口, WINDOW_FREERATIO); //参数1表示名称参数二代表窗口自由显示//表示显示在新创建的输入窗口上imshow(输入窗口, src); //第一个参数表示窗口名称src表示数据对象Mat //在主函数中调用之前创建的类对象 QuickDemo qd;//色彩转换//qd.colorSpace_Demo(src);//图像对象的创建//qd.mat_creation_demo(src);//图像像素的读写//qd.pixel_visit_demo1(src); //数组//qd.pixel_visit_demo2(src); //指针//图像像素的算术操作//qd.operators_demo(src);//滚动条调整图像亮度//qd.tracking_bar_demo1(src);//滚动条参数传递(亮度和对比度)//qd.tracking_bar_demo2(src);//键盘响应//qd.key_demo(src);//opencv自带颜色操作//qd.color_style_demo(src);//图像像素的逻辑操作//qd.bitwise_demo(src);//通道的分离与合并//qd.channels_demo(src);//图像色彩空间转换//qd.inrange_demo(src);//图像像素值统计//qd.pixel_statistic_demo(src);//图像几何形状的绘制//qd.drawing_demo(src);//随机数与随机颜色//qd.random_drawing();//多边形填充与绘制//qd.polyline_drawing_demo(src);//鼠标操作与响应//qd.mouse_drawing_demo(src);//图像像素类型的转换与归一化//qd.norm_demo(src);//图像的放缩与差值//qd.resize_demo(src);//图像的旋转定义好的//qd.flip_demo(src);//图像的旋转自定义//qd.rotate_demo(src);//视频文件摄像头使用//qd.video_demo1(src);//视频处理与保存//qd.video_demo2(src);//图像直方图//qd.histogram_demo(src);//二维直方图//qd.histogram_2d_demo(src);//直方图的均衡化qd.histogram_eq_demo(src);waitKey(0); //执行到这句程序阻塞。参数表示延时时间。单位ms毫秒destroyAllWindows(); //销毁前面创建的显示窗口return 0; } 运行结果        Opencv4基于C的 实时人脸检测 Opencv4基于C的 实时人脸检测
http://www.zqtcl.cn/news/725034/

相关文章:

  • 租用网站服务器价格清远医院网站建设方案
  • 房地产网站建设方案书福田所有车型
  • 网站功能描述高清视频网络服务器免费
  • 天台做网站微博推广效果怎么样
  • 苏州专门网站网站站长统计怎么做
  • 社交网站开发注意事项call_user_func_array() wordpress
  • 泉州企业免费建站个人网站设计与开发
  • 网站建设流程书籍互联网行业黑话
  • 山亭 网站建设wordpress 添加头像
  • 龙南县建设局网站新手如何做网络推广
  • 网站开发建设赚钱吗巩义旅游网站建设公司
  • 网站建设代码介绍网站顶部导航代码
  • 帮别人做网站需要什么能力sem专员
  • 无锡网站建设 app推广软件
  • 免费入驻的外贸网站网站建设怎么打开
  • 怎么做中英文网站网站建设费做什么
  • 信阳网站建设汉狮怎么样做曖視頻网站
  • 做电影电视剧网站推广移动应用开发是什么意思
  • 网站排名优化策划中山搜索引擎优化
  • 网站建设培训证书平台型网站建设预算表
  • 网站建设后压缩代码网站如何做进一步优化
  • 大型旅游网站源码 织梦襄阳网站建设楚翼网络
  • 快速搭建网站服务器做历史卷子的网站
  • 淘口令微信网站怎么做通化seo招聘
  • 帮人做传销网站违法吗深圳也放开了
  • 发布程序后网站有很多促销策略
  • 网页网站项目综合网站建设合同.doc
  • 网站建设公司黄页企业vi系统设计公司
  • 建设局网站新闻昆明个人网站建设平台
  • 清远市建设工程交易中心网站网站打开慢什么原因呢