- 二十六、直方图均衡化
- 26.1 quickopencv.h
- 26.2 QuickDemo.cpp
- 26.3 test.cpp
- 二十七、图像卷积操作
- 27.1 quickopencv.h
- 27.2 QuickDemo.cpp
- 27.3 test.cpp
- 二十八、高斯模糊
- 28.1 quickopencv.h
- 28.2 QuickDemo.cpp
- 28.3 test.cpp
- 二十九、高斯双边模糊
- 29.1 quickopencv.h
- 29.2 QuickDemo.cpp
- 29.3 test.cpp
- 三十、案例:实时人脸检测
- 30.1 quickopencv.h
- 30.2 QuickDemo.cpp
- 30.3 test.cpp
知识来源:哔哩哔哩。以下内容仅为学习笔记,不做其他用途。 二十六、直方图均衡化
知识点:
- equalizeHist(gray, dst);//直方图均衡化。参数包括:输入图像,输出图像。
#include26.2 QuickDemo.cppusing namespace cv; class QuickDemo //QuickDemo对象 { public: void histogram_eq_demo(Mat &image); };
#include26.3 test.cpp#include void QuickDemo::histogram_eq_demo(Mat &image) { Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY);//BGR转灰度图像 imshow("灰度图像", gray); //直方图均衡化只支持灰度图像,不支持彩色图像。 Mat dst; equalizeHist(gray, dst); imshow("直方图均衡化演示", dst); }
#include二十七、图像卷积操作#include #include using namespace std; using namespace cv; int main(int argc,char **argv) { Mat src = imread("D:/opencv/pictures/3 (4).jpeg", IMREAD_ANYCOLOR);//B,G,R蓝绿红通道图像 if (src.empty()) { printf("could not load image"); //如果路径不正确,则显示无法导入图片。 return -1; } namedWindow("输入窗口", WINDOW_AUTOSIZE); imshow("输入窗口", src); //在窗口显示图像 QuickDemo qd; //调用之前创建的类对象 qd.histogram_eq_demo(src); waitKey(0); //暂停程序,等待一个按键输入,单位ms destroyAllWindows(); //销毁所有创建的窗口 return 0; }
知识点:
- blur(image, dst, Size(5, 5), Point(-1, -1));//卷积操作。//参数包括:image为输入图像;dst为输出图像;Size(5, 5)为卷积核大小5*5;Point(-1, -1)为默认的中心锚点。
#include27.2 QuickDemo.cppusing namespace cv; class QuickDemo //QuickDemo对象 { public: void blur_demo(Mat &image); };
#include27.3 test.cpp#include void QuickDemo::blur_demo(Mat &image) { Mat dst; blur(image, dst, Size(5, 5), Point(-1, -1)); imshow("图像卷积操作", dst); }
#include二十八、高斯模糊#include #include using namespace std; using namespace cv; int main(int argc,char **argv) { Mat src = imread("D:/opencv/pictures/3 (1).jpeg", IMREAD_ANYCOLOR);//B,G,R蓝绿红通道图像 if (src.empty()) { printf("could not load image"); //如果路径不正确,则显示无法导入图片。 return -1; } namedWindow("输入窗口", WINDOW_AUTOSIZE); imshow("输入窗口", src); //在窗口显示图像 QuickDemo qd; //调用之前创建的类对象 qd.blur_demo(src); waitKey(0); //暂停程序,等待一个按键输入,单位ms destroyAllWindows(); //销毁所有创建的窗口 return 0; }
知识点:
- GaussianBlur(image, dst, Size(5, 5), 15);//高斯模糊。参数包括:image为输入图像;dst为输出图像;Size(5, 5)为内核大小5*5,必须是正数和奇数;第四个参数:double类型的sigmaX,表示高斯核函数在X方向上的标准偏差;第五个参数:double类型的sigmaY,表示高斯核函数在Y方向上的标准偏差。
#include28.2 QuickDemo.cppusing namespace cv; class QuickDemo //QuickDemo对象 { public: void gaussian_blur_demo(Mat &image); };
#include28.3 test.cpp#include void QuickDemo::gaussian_blur_demo(Mat &image) { Mat dst; GaussianBlur(image, dst, Size(5, 5), 15); imshow("高斯模糊", dst); }
#include二十九、高斯双边模糊#include #include using namespace std; using namespace cv; int main(int argc,char **argv) { Mat src = imread("D:/opencv/pictures/3 (1).jpeg", IMREAD_ANYCOLOR);//B,G,R蓝绿红通道图像 if (src.empty()) { printf("could not load image"); //如果路径不正确,则显示无法导入图片。 return -1; } namedWindow("输入窗口", WINDOW_AUTOSIZE); imshow("输入窗口", src); //在窗口显示图像 QuickDemo qd; //调用之前创建的类对象 qd.gaussian_blur_demo(src); waitKey(0); //暂停程序,等待一个按键输入,单位ms destroyAllWindows(); //销毁所有创建的窗口 return 0; }
知识点:
- bilateralFilter(image, dst, 0, 100, 0);//高斯双边模糊。参数包括:参数包括:image为输入图像;dst为输出图像;表示在滤波过程中每个像素邻域的直径。如果这个值设为非正数,则从第五个参数sigmaSpace来计算它;第四个参数:颜色空间滤波器的sigma值,这个值越大,表示该像素邻域内有越宽广的颜色被混合到一起,会产生较大的半相等颜色区域;第五个参数:坐标空间中滤波器的sigma值,坐标空间的标准方差,它的值越大,则越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
#include29.2 QuickDemo.cppusing namespace cv; class QuickDemo //QuickDemo对象 { public: void bifilter_demo(Mat &image); };
#include29.3 test.cpp#include void QuickDemo::bifilter_demo(Mat &image) { Mat dst; bilateralFilter(image, dst, 0, 100, 0); namedWindow("高斯双边模糊", WINDOW_FREERATIO); imshow("高斯双边模糊", dst); }
#include三十、案例:实时人脸检测 30.1 quickopencv.h#include #include using namespace std; using namespace cv; int main(int argc,char **argv) { Mat src = imread("D:/opencv/pictures/3 (1).jpeg", IMREAD_ANYCOLOR);//B,G,R蓝绿红通道图像 if (src.empty()) { printf("could not load image"); //如果路径不正确,则显示无法导入图片。 return -1; } namedWindow("输入窗口", WINDOW_AUTOSIZE); imshow("输入窗口", src); //在窗口显示图像 QuickDemo qd; //调用之前创建的类对象 qd.bifilter_demo(src); waitKey(0); //暂停程序,等待一个按键输入,单位ms destroyAllWindows(); //销毁所有创建的窗口 return 0; }
#include30.2 QuickDemo.cppusing namespace cv; class QuickDemo //QuickDemo对象 { public: void face_detecction_demo(); };
#include30.3 test.cpp#include void QuickDemo::face_detecction_demo() { std::string root_dir = "D:/opencv/sources/samples/dnn/face_detector/"; dnn::Net net = dnn::readNetFromTensorflow(root_dir+"opencv_face_detector_uint8.pb",root_dir+"opencv_face_detector.pbtxt"); VideoCapture capture("D:/opencv/pictures/1234.mp4"); Mat frame; while (true) { capture.read(frame); if (frame.empty()) { break; } Mat blob = dnn::blobFromImage(frame,1.0,Size(300,300),Scalar(104,177,123),false,false); net.setInput(blob); Mat probs = net.forward(); Mat detectionMat(probs.size[2],probs.size[3],CV_32F,probs.ptr ()); for (int i = 0; i < detectionMat.rows; i++) { float confidence = detectionMat.at (i, 2); if (confidence > 0.5) { int x1 = static_cast (detectionMat.at (i, 3)*frame.cols); int y1 = static_cast (detectionMat.at (i, 4)*frame.rows); int x2 = static_cast (detectionMat.at (i, 5)*frame.cols); int y2 = static_cast (detectionMat.at (i, 6)*frame.rows); Rect box(x1,y1,x2-x1,y2-y1); rectangle(frame,box,Scalar(0,0,255),2,8,0); } } imshow("人脸检测演示",frame); int c = waitKey(1); if (c == 27) { break; } } }
#include#include #include using namespace std; using namespace cv; int main(int argc,char **argv) { Mat src = imread("D:/opencv/pictures/3 (1).jpeg", IMREAD_ANYCOLOR);//B,G,R蓝绿红通道图像 if (src.empty()) { printf("could not load image"); //如果路径不正确,则显示无法导入图片。 return -1; } namedWindow("输入窗口", WINDOW_AUTOSIZE); imshow("输入窗口", src); //在窗口显示图像 QuickDemo qd; //调用之前创建的类对象 qd.face_detecction_demo(); waitKey(0); //暂停程序,等待一个按键输入,单位ms destroyAllWindows(); //销毁所有创建的窗口 return 0; }



