OpenCV簡介與安裝
773
2025-03-31
簡單的變換
很好,現在你已經可以用OpenCV來自己動手建立一個視頻播放器了,這和現有的那些播放器差不多,但是我們的關注點在計算機視覺,所以希望做一些計算機視覺相關的工作。許多基礎的計算機視覺工作都包括對視頻流使用濾波器。我們將會對已有的程序進行修改以對視頻中的每一幀實現一些簡單的操作。
一個最簡單的操作就是對圖像的平滑處理,這將有通過高斯核或者其他核卷積效減小圖像的信息量。OpenCV使得這樣使用高斯核的卷積非常容易實現。如示例2-5所示,我們
注7: 因為HighGUI是一個輕量級的、易于使用的工具,所以cv::createTrackbar()不會區分滑動條的名稱和真正顯示在屏幕上的滑動條旁邊的標簽,你也許已經注意到 cv::namedWindow()也不區分窗口的名稱以及真正在窗口上顯示的名稱。
可以新建一個名為"Example4-out"的窗口開始,并且在這個窗口顯示處理結果。所以,在我們調用cv::imshow()在輸入窗口并顯示新獲得的圖像之后,我們就可以在output窗口計算并且顯示處理結果。
示例2-5:加載圖像并且在顯示之前平滑處理圖像
#include
// Create some windows to show the input?? // and output images in.
//
cv::namedWindow( "Example2_5-in", cv::WINDOW_AUTOSIZE );?? cv::namedWindow( "Example2_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;
// Do the 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);
// Show the smoothed image in the output window
//
cv::imshow( "Example2_5-out", out );
// Wait for the user to hit a key, windows will self destruct
//?? cv::waitKey( 0 );
}
第一個cv::imshow()的調用和之前我們的使用方法沒有什么差別。但是下一個調用的過程中,我們申請了另一個圖像結構,接下來,C++對象cv::Mat使我們的工作變得輕松了。我們只需要實例化一個輸出矩陣out,這將由程序自行管理并在合適的時候自動分配,釋放內存。為了讓這點更清晰,我們將其輸入到兩個cv::GaussianBlur()函數中。在第一次調用中,輸入圖像被5×5大小的高斯核模糊并且被寫入out變量中。高斯核的大小必須是奇數,因為高斯卷積會在其覆蓋區域的中心輸出結果。在下一次調用 cv::GaussianBlur()的時候,由于被分配了臨時的存儲空間,所以out可以同時作為輸入和輸出。執行了兩次模糊操作的圖像被作為結果輸出,在終止之前等待用戶進行鍵盤事件,然后在對象生命周期結束的時候清理申請的內存。
OpenCV 視頻
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。