1. 程式人生 > >快速上手OpenCV影象處理

快速上手OpenCV影象處理

影象讀取和顯示

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;
}