OpenCV(C++版本)基础相关(7):直方图均衡化、图像卷积操作、高斯模糊、高斯双边模糊、实时人脸检测案例
文章目录
- 二十六、直方图均衡化
- 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);//直方图均衡化。参数包括:输入图像,输出图像。
26.1 quickopencv.h
#include<opencv2/opencv.hpp>
using namespace cv;class QuickDemo //QuickDemo对象
{public:void histogram_eq_demo(Mat &image);};
26.2 QuickDemo.cpp
#include<quickopencv.h>
#include<iostream>void QuickDemo::histogram_eq_demo(Mat &image)
{Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);//BGR转灰度图像imshow("灰度图像", gray);//直方图均衡化只支持灰度图像,不支持彩色图像。Mat dst;equalizeHist(gray, dst);imshow("直方图均衡化演示", dst);
}
26.3 test.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
#include<quickopencv.h>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); //暂停程序,等待一个按键输入,单位msdestroyAllWindows(); //销毁所有创建的窗口return 0;
}
二十七、图像卷积操作
知识点:
- blur(image, dst, Size(5, 5), Point(-1, -1));//卷积操作。//参数包括:image为输入图像;dst为输出图像;Size(5, 5)为卷积核大小5*5;Point(-1, -1)为默认的中心锚点。
27.1 quickopencv.h
#include<opencv2/opencv.hpp>
using namespace cv;class QuickDemo //QuickDemo对象
{public:void blur_demo(Mat &image);
};
27.2 QuickDemo.cpp
#include<quickopencv.h>
#include<iostream>void QuickDemo::blur_demo(Mat &image)
{Mat dst;blur(image, dst, Size(5, 5), Point(-1, -1));imshow("图像卷积操作", dst);
}
27.3 test.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
#include<quickopencv.h>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); //暂停程序,等待一个按键输入,单位msdestroyAllWindows(); //销毁所有创建的窗口return 0;
}
二十八、高斯模糊
知识点:
- GaussianBlur(image, dst, Size(5, 5), 15);//高斯模糊。参数包括:image为输入图像;dst为输出图像;Size(5, 5)为内核大小5*5,必须是正数和奇数;第四个参数:double类型的sigmaX,表示高斯核函数在X方向上的标准偏差;第五个参数:double类型的sigmaY,表示高斯核函数在Y方向上的标准偏差。
28.1 quickopencv.h
#include<opencv2/opencv.hpp>
using namespace cv;class QuickDemo //QuickDemo对象
{public:void gaussian_blur_demo(Mat &image);
};
28.2 QuickDemo.cpp
#include<quickopencv.h>
#include<iostream>void QuickDemo::gaussian_blur_demo(Mat &image)
{Mat dst;GaussianBlur(image, dst, Size(5, 5), 15);imshow("高斯模糊", dst);
}
28.3 test.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
#include<quickopencv.h>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); //暂停程序,等待一个按键输入,单位msdestroyAllWindows(); //销毁所有创建的窗口return 0;
}
二十九、高斯双边模糊
知识点:
- bilateralFilter(image, dst, 0, 100, 0);//高斯双边模糊。参数包括:参数包括:image为输入图像;dst为输出图像;表示在滤波过程中每个像素邻域的直径。如果这个值设为非正数,则从第五个参数sigmaSpace来计算它;第四个参数:颜色空间滤波器的sigma值,这个值越大,表示该像素邻域内有越宽广的颜色被混合到一起,会产生较大的半相等颜色区域;第五个参数:坐标空间中滤波器的sigma值,坐标空间的标准方差,它的值越大,则越远的像素会相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。
29.1 quickopencv.h
#include<opencv2/opencv.hpp>
using namespace cv;class QuickDemo //QuickDemo对象
{public:void bifilter_demo(Mat &image);
};
29.2 QuickDemo.cpp
#include<quickopencv.h>
#include<iostream>void QuickDemo::bifilter_demo(Mat &image)
{Mat dst;bilateralFilter(image, dst, 0, 100, 0);namedWindow("高斯双边模糊", WINDOW_FREERATIO);imshow("高斯双边模糊", dst);
}
29.3 test.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
#include<quickopencv.h>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); //暂停程序,等待一个按键输入,单位msdestroyAllWindows(); //销毁所有创建的窗口return 0;
}
三十、案例:实时人脸检测
30.1 quickopencv.h
#include<opencv2/opencv.hpp>
using namespace cv;class QuickDemo //QuickDemo对象
{public:void face_detecction_demo();
};
30.2 QuickDemo.cpp
#include<quickopencv.h>
#include<iostream>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<float>());for (int i = 0; i < detectionMat.rows; i++){float confidence = detectionMat.at<float>(i, 2);if (confidence > 0.5){int x1 = static_cast<int>(detectionMat.at<float>(i, 3)*frame.cols);int y1 = static_cast<int>(detectionMat.at<float>(i, 4)*frame.rows);int x2 = static_cast<int>(detectionMat.at<float>(i, 5)*frame.cols);int y2 = static_cast<int>(detectionMat.at<float>(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; }}
}
30.3 test.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
#include<quickopencv.h>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); //暂停程序,等待一个按键输入,单位msdestroyAllWindows(); //销毁所有创建的窗口return 0;
}
OpenCV(C++版本)基础相关(7):直方图均衡化、图像卷积操作、高斯模糊、高斯双边模糊、实时人脸检测案例相关推荐
- 【OpenCV 例程200篇】46. 直方图均衡化
[OpenCV 例程200篇]46. 直方图均衡化 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直方图是反映图 ...
- opencv入门基础(七)基于dlib进行本地图片、实时人脸检测
opencv入门基础(七)基于dlib进行本地图片.实时人脸检测 一.背景知识 1.Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口. 2.由于Dlib对于人脸特征提取效果很 ...
- 基于MATLAB对低照度图像进行直方图均衡化和同态滤波操作
资源下载地址:https://download.csdn.net/download/sheziqiong/85897108 资源下载地址:https://download.csdn.net/downl ...
- 计算机视觉OpenCv学习系列:第十部分、实时人脸检测
第十部分.实时人脸检测 第一节.实时人脸检测 1.OpenCV人脸检测支持演化 2.OpenCV DNN检测函数 3.代码练习与测试 学习参考 第一节.实时人脸检测 1.OpenCV人脸检测支持演化 ...
- 使用mediapipe和OpenCV实现摄像头实时人脸检测
# 摄像头实时人脸检测 # opencv import timeimport cv2 # mediapipe ai工具包 import mediapipe as mp # 进度条库 from tqdm ...
- 【OpenCV学习】第6课:图像模糊(中值滤波,高斯双边滤波)
仅自学做笔记用,后续有错误会更改 理论 中值滤波:对核内数值先进行排序,再取中间那个值 注1:中值滤波属于统计学的排序滤波器 注2:中值滤波对椒盐噪声有很好的抑制作用 高斯双边滤波(美颜磨皮效果一般都 ...
- 【OpenCV 4】图像卷积操作(Blur)
一.编程环境: OpenCV 4.1.0 IDE Visual Studio 2017 Enterprise (15.9.13) 操作系统 Windows 10 x64 中文专业版 (1903) 二 ...
- c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版
本文实现彩色图像的全局直方图均衡.分别对R/G/B三通道均衡,读写图片采用OpenCV.代码如下: #include //#include //#include //#include #include ...
- 在OpenCV里实现限制对比度的直方图均衡化
下面将要介绍功能强大.用途广泛.影响深远的对比度有限的自适应直方图均衡(CLAHE,Contrast Limited Adaptive Histogram Equalization)算法.尽管最初它仅 ...
最新文章
- SQL Server 查询性能优化——覆盖索引(二)
- 大会剧透 | IDEA大会精彩议题全释放
- UML模型中的图-静态图【类图、对象图】
- 汉能:让人类像叶绿素一样利用太阳能
- 基础知识 + 面试题目 总结 索引页
- 关于IE的RegExp.exec
- 练习题︱基于今日头条开源数据(二)——两款Apriori算法实践
- python判断数组中是否有重复元素_python经典面试算法题4.1:如何找出数组中唯一的重复元素...
- BZOJ 1597 [Usaco2008 Mar]土地购买 (斜率优化dp)
- T100服务端接口开发步骤
- 深度Linux挂载盘
- FlashFXP中文破解 指南
- 模仿支付宝支付成功特效:svg圆圈转动+打钩
- Laravel版本更新异常4.2.8- 4.2.9 Declaration of ... CompilerEngine ... should be compa
- 团队作业第五次—项目系统设计与数据库设计
- line-height的底线、基线、中线、顶线
- c语言 运行结果是空白的,为什么输出是空白
- 我,是一个培训班出来的程序员
- 如何将彩色证件照调成黑白
- 基于区块链的学生课程成绩查询系统