1. 程式人生 > >學習OpenCV3----幾個簡單的影象處理示例

學習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"

, cv::WINDOW_AUTOSIZE );

//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);

}