學習OpenCV3----幾個簡單的影象處理示例
1. 讀入影象後,可以對影象進行處理,介紹了利用高斯濾波進行簡單的影象處理,顯示了高斯濾波前後的影象變換,GaussianBlur()函式原型:
voidGaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, doublesigmaY=0, int borderType=BORDER_DEFAULT);
引數詳解如下:
src,輸入影象,即源影象,填Mat類的物件即可。它可以是單獨的任意通道數的圖片,但需要注意,圖片深度應該為CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
dst,即目標影象,需要和源圖片有一樣的尺寸和型別。比如可以用Mat::Clone,以源圖片為模板,來初始化得到如假包換的目標圖。
ksize,高斯核心的大小。其中ksize.width和ksize.height可以不同,但他們都必須為正數和奇數(並不能理解)。或者,它們可以是零的,它們都是由sigma計算而來。
sigmaX,表示高斯核函式在X方向的的標準偏差。
sigmaY,表示高斯核函式在Y方向的的標準偏差。若sigmaY為零,就將它設為sigmaX,如果sigmaX和sigmaY都是0,那麼就由ksize.width和ksize.height計算出來。
為了結果的正確性著想,最好是把第三個引數Size,第四個引數sigmaX和第五個引數sigmaY全部指定到。
borderType,用於推斷影象外部畫素的某種邊界模式。注意它有預設值BORDER_DEFAULT。
int main( int argc, char** argv ) {
// Load an image specified onthe command line.
cv::Mat image = cv::imread(argv[1],-1);
//Create some windows to show the input
// andoutput images in.
cv::namedWindow( "Example 2-5-in",cv::WINDOW_AUTOSIZE );
cv::namedWindow( "Example 2-5-out"
//Create a window to show our input image
cv::imshow( "Example2-5-in", image );
//Create an image to hold the smoothed output
cv::Mat out;
// Dothe smoothing
// (Note: Could use GaussianBlur(), blur(), medianBlur() or
//bilateralFilter(). )
cv::GaussianBlur( image, out, cv::Size(5,5),3, 3);
cv::GaussianBlur( out, out, cv::Size(5,5), 3,3);
// Showthe smoothed image in the output window
cv::imshow( "Example2-5-out", out );
// Waitfor the user to hit a key, windows will self destruct
cv::waitKey( 0 );
}
2. 顯示了利用影象金字塔pyrDown()對影象直接進行1/2的縮小的結果。pyrDown()能對影象進行快速縮小,每次影象的大小為原來影象的1/2
int main( int argc, char** argv ) {
cv::Mat img1,img2;
cv::namedWindow( "Example 2-6-in",cv::WINDOW_AUTOSIZE );
cv::namedWindow( "Example 2-6-out", cv::WINDOW_AUTOSIZE );
img1 = cv::imread( argv[1] );
cv::imshow( "Example2-6-in", img1 );
cv::pyrDown( img1, img2);
cv::imshow( "Example2-6-out", img2 );
cv::waitKey(0);
return 0;
};
3. 利用cvtColor()將影象在各種顏色空間上進行轉換,本例直接將彩色影象轉換為灰度影象
int main( int argc, char** argv ) {
cv::Mat img_rgb, img_gry, img_cny;
cv::namedWindow( "Example Gray",cv::WINDOW_AUTOSIZE );
cv::namedWindow( "Example Canny",cv::WINDOW_AUTOSIZE );
img_rgb = cv::imread( argv[1] );
cv::cvtColor( img_rgb, img_gry,cv::COLOR_BGR2GRAY);
cv::imshow( "ExampleGray", img_gry );
cv::Canny( img_gry, img_cny, 10, 100, 3, true );
cv::imshow( "ExampleCanny", img_cny );
cv::waitKey(0);
}