目的
了解和實踐OpenCV在空間濾波上的應用。
方法
Source:機器視覺技術與應用_中國大學MOOC(慕課) (icourse163.org)
當圖像中的邊緣信息和卷積核的形狀是相符合的,得到的響應值最大。
濾波和邊緣提取函數
中值濾波 |
|
均值濾波 |
|
高斯均值濾波 |
|
Sobel邊緣提取 |
|
不同函數效果展示
中值濾波 |
|
||||||
高斯均值濾波 |
|
||||||
Sobel邊緣提取 |
|
簡單磨皮程序的實現
原理 |
|
實驗代碼 |
#include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { void Convolution_app(); Convolution_app(); return 0; } void Convolution_app() { //簡單的磨皮程序 //打開攝像頭 VideoCapture cap(0); //膚色h范圍 double i_minH = 0; double i_maxH = 20; //膚色飽和度s范圍 double i_minS = 43; double i_maxS = 255; //膚色亮度范圍 double i_minV = 55; double i_maxV = 255; while (true) { //定義圖像容器 Mat frame; Mat hsvMat; Mat maskMat; Mat objectMat; Mat gussMat; cap >> frame;//讀取當前幀的圖像 //將圖像轉為hsv色閾 cvtColor(frame, hsvMat, COLOR_BGR2HSV); //初始化maskMat frame.copyTo(maskMat); //利用inRange函數對圖片進行hsv篩選 inRange(hsvMat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), maskMat); //將原圖拷入輸出圖像中 frame.copyTo(objectMat); //對圖像進行高斯濾波 GaussianBlur(frame, gussMat, Size(5, 5), 3, 0); //高斯濾波后的人臉部分送入輸出圖像中 gussMat.copyTo(objectMat, maskMat); //顯示結果 imshow("磨皮前", frame); imshow("mask", maskMat); imshow("磨皮后", objectMat); waitKey(30); } } |
效果展示 |
|
結果
討論
到了這里,關于OpenCV-空間濾波學習筆記的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!