opencv 視訊馬賽克效果_調用resize API
opencv_馬賽克效果
影像的解析度設定 / 影像之縮放
可以藉由 resize這個方法
void resize(InputArray src,
OutputArray dst,
Size dsize,
double fx=0,
double fy=0,
int interpolation=INTER_LINEAR )
InputArray : 輸入圖
OutputArray : 輸出圖:型態會和輸入圖相同(皆為Mat)
dsize:輸出尺寸,當輸入為0時,fx、fy皆不可為0,可使用 Size(寬,高) 或者 CvSize(寬,高)
fx:水平縮放比率,當輸入為0時,fx=(double)dsize.width/src.cols
fy:垂直縮放比率,當輸入為0時,fy=(double)dsize.height/src.rows
interpolation:內插方式
內插方式有以下幾種可選:
CV_INTER_NEAREST :最鄰近插點法
CV_INTER_LINEAR :雙線性插補(預設)
CV_INTER_AREA :臨域像素再取樣插補
CV_INTER_CUBIC :雙立方插補,4×4大小的補點
CV_INTER_LANCZOS4 :Lanczos插補,8×8大小的補點
當我們縮小影像時,使用CV_INTER_AREA會有比較好的效果,
當我們放大影像,CV_INTER_CUBIC會有最好的效果,但是計算花費時間較多,
CV_INTER_LINEAR能在影像品質和花費時間上取得不錯的平衡。
【效果呈現】
【程式碼】
影像的解析度設定 / 影像之縮放
可以藉由 resize這個方法
void resize(InputArray src,
OutputArray dst,
Size dsize,
double fx=0,
double fy=0,
int interpolation=INTER_LINEAR )
InputArray : 輸入圖
OutputArray : 輸出圖:型態會和輸入圖相同(皆為Mat)
dsize:輸出尺寸,當輸入為0時,fx、fy皆不可為0,可使用 Size(寬,高) 或者 CvSize(寬,高)
fx:水平縮放比率,當輸入為0時,fx=(double)dsize.width/src.cols
fy:垂直縮放比率,當輸入為0時,fy=(double)dsize.height/src.rows
interpolation:內插方式
內插方式有以下幾種可選:
CV_INTER_NEAREST :最鄰近插點法
CV_INTER_LINEAR :雙線性插補(預設)
CV_INTER_AREA :臨域像素再取樣插補
CV_INTER_CUBIC :雙立方插補,4×4大小的補點
CV_INTER_LANCZOS4 :Lanczos插補,8×8大小的補點
當我們縮小影像時,使用CV_INTER_AREA會有比較好的效果,
當我們放大影像,CV_INTER_CUBIC會有最好的效果,但是計算花費時間較多,
CV_INTER_LINEAR能在影像品質和花費時間上取得不錯的平衡。
【效果呈現】
【程式碼】
#include <opencv2/opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\video\background_segm.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat grayImage1;
//用矩陣紀錄抓取的每張frame
Mat frame;
//建立一個視窗,名稱為camera
//namedWindow("camera", 1);
while (1)
{
//抓取攝影機
VideoCapture cap(0);
//嘗試開啟攝影機
if (!cap.isOpened()) return -1;
//namedWindow("連續影像差", CV_WINDOW_NORMAL);
for (;;)
{
//把取得的影像放置到矩陣中
cap >> frame;
cvtColor(frame, grayImage1, COLOR_BGR2GRAY);
//namedWindow("灰階視訊_use_opencv2", CV_WINDOW_NORMAL);
//imshow("灰階視訊_use_opencv2", grayImage1);
Mat src_resize;
resize(grayImage1 , src_resize , Size(60,60));
namedWindow("resize過後的結果" , CV_WINDOW_NORMAL);
imshow("resize過後的結果" , src_resize);
if (waitKey(30) >= 0) break;
}
}
system("PAUSE");
}
留言
張貼留言