快速上手OpenCV影象處理
阿新 • • 發佈:2019-02-01
影象讀取和顯示
OpenCV中通過imread函式讀取圖片,讀取的圖片通過Mat類接收,通過imshow函式顯示圖片。
#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//讀取圖片
Mat Img = imread("1.jpg");
//顯示圖片
imshow("顯示圖片", Img);
//影象顯示1000毫秒後關閉(當waitKey引數為0時,一直顯示圖片直到使用者按下按鍵)
waitKey(1000);
return 0;
}
影象腐蝕
利用影象的暗色部分腐蝕掉影象的高亮部分
#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//讀取圖片
Mat srcImage = imread("2.jpg");
//顯示原圖
imshow("顯示原圖", srcImage);
//腐蝕操作
Mat element = getStructuringElement(MORPH_RECT, Size(9 , 9)); //定義腐蝕結構
Mat dstImage;
erode(srcImage, dstImage, element); //腐蝕結果儲存在dstImage中
//顯示腐蝕效果
imshow("腐蝕效果", dstImage);
waitKey(0);
return 0;
}
影象模糊
#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//讀取圖片
Mat srcImage = imread("C:\\Users\\Simple\\Desktop\\3.jpg");
//顯示原圖
imshow("顯示原圖", srcImage);
//模糊操作
Mat dstImage;
blur(srcImage, dstImage, Size(7, 7)); //blur為濾波操作,濾波的效果就是模糊,模糊的結果儲存在dstImage
//顯示模糊效果
imshow("模糊效果", dstImage);
waitKey(0);
return 0;
}
邊緣檢測
#include <iostream>
#include <opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//讀取圖片
Mat srcImage = imread("4.jpg");
//顯示原圖
imshow("顯示原圖", srcImage);
//邊緣檢測
Mat dstImage;
Canny(srcImage, dstImage, 150, 180, 3); //將檢測到的邊緣儲存在dstImage
//顯示邊緣檢測效果
imshow("邊緣檢測", dstImage);
waitKey(0);
return 0;
}
讀取攝像頭和視訊
讀取攝像頭和讀取視訊本質上沒有區別,因為視訊就是攝像頭錄下的一幀一幀的圖片。
#include <iostream>
#include <opencv.hpp>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//////////////////////////////////////////////////////////////////////////
//讀取視訊
string video_name("1.avi");
VideoCapture capture(video_name);
//迴圈顯示每一幀
while (1)
{
Mat frame; //用於儲存每一幀
capture >> frame; //讀取一幀
//若視訊播放完,退出
if(frame.empty())
break;
imshow("讀取視訊", frame);
waitKey(30); //延時30ms
}
//////////////////////////////////////////////////////////////////////////
//讀取攝像頭
//VideoCapture capture;
//int camera_id = 0; //定義攝像頭編號,一般從0開始編號
//capture.open(camera_id); //開啟攝像頭
//while (1)
//{
// Mat frame; //用於儲存每一幀
// capture >> frame; //讀取一幀
// imshow("讀取攝像頭", frame);
// waitKey(30); //延時30ms
//}
return 0;
}