1. 程式人生 > >影象腐蝕,模糊,canny邊緣檢測,opencv中攝像頭捕捉的影象

影象腐蝕,模糊,canny邊緣檢測,opencv中攝像頭捕捉的影象

有關opencv環境配置這方面的問題,網上有很多資料,在這裡我就不多說了,本人也是剛開始啟程。
計算機視覺是一門研究如何使機器“看”的科學,具體的說,就是指用攝像機和電腦代替人眼對目標進行識別,跟蹤和測量等機器視覺,並進一步做圖形處理,用電腦處理使之成為更加適合人眼球觀察或傳送給儀器檢測的影象的一門科學,因要用到影象處理,故本人要對opencv要有所瞭解。
1、標頭檔案
#include<opencv2/opencv.hpp>//opencv標頭檔案的包含
#include<opecv2/highgui.hpp>//opencv highgui模組標頭檔案
#include<opencv2/imgproc/improc.hpp>//opencv影象處理標頭檔案
2、頭像腐蝕
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>//對影象要進行所以要用到影象處理標頭檔案
using namespace cv;

int main(){
    Mat srcimge = imread("1000.jpg");//Mat是影象儲存結構的一個類,imread讀取影象的函式
    imshow("原圖(腐蝕操作)", srcimge);//列印一張圖
    //進行腐蝕操作
    Mat element = getStructuringElement(MORPH_RECT,Size(3
,3));//改變size的數字,即改變核心矩陣裡面的尺寸,就可以改變腐蝕程度 //getStructuringElement函式的返回值為指定形狀和尺寸的結構元素(核心矩陣) Mat srcimge1; erode(srcimge, srcimge1, element);//erode影象腐蝕操作函式 //顯示效果圖 imshow("效果圖(腐蝕操作)",srcimge1); waitKey(0); return 0; }

效果圖如圖一:
圖一
這裡寫圖片描述
2、影象模糊

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp> using namespace cv; int main(){ //展示原圖 Mat srcimge = imread("1001.jpg"); imshow("原圖(影象模糊)",srcimge); //進行模糊操作 Mat srcimge1; blur(srcimge,srcimge1,Size(7,7));//blur為影象模糊操作函式 //展示效果圖 imshow("效果圖(影象模糊)",srcimge1); waitKey(0); return 0; }

效果圖如圖二
圖二
這裡寫圖片描述
3、canny邊緣檢測

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main(){
    Mat srcimge = imread("1002.jpg");
    imshow("原圖(邊緣檢測)",srcimge);
    Mat srcimge1, edge, grayimge;
    cvtColor(srcimge,grayimge,COLOR_BGR2GRAY);//將原影象轉換為灰度影象,檢測的時候黑白更易辨別
    blur(grayimge,edge,Size(10,10));//將影象模糊以降噪,邊緣變得清晰
    //經過除錯核心矩陣的行列為10時,邊緣更突出。
    Canny(edge,edge,5,9,5);//進行邊緣檢測
    imshow("效果圖(Canny邊緣檢測)",edge);
    waitKey(0);
    return 0;
}

效果圖如圖三
圖三
這裡寫圖片描述
4、opencv中的攝像頭捕捉的影象

#include<opencv2\opencv.hpp>

using namespace cv;
int main(){
    VideoCapture capture(0);//攝像頭初始化
    Mat edge;
    while (1){
        Mat frame;
        capture >> frame;//捕捉當前幀
        //cvtColor(frame,edge,COLOR_BGR2GRAY);
        //blur(edge,edge,Size(7,7));
        //Canny(edge,edge,0,30,3);
        //註釋的三步為將攝像圖捕捉到的每一幀經過canny檢測後列印
        imshow("讀取視訊",frame);//顯示當前幀的影象,如果是canny檢測的話,將frame改為edge
        if(waitKey(30)>=0)break;
    }
    return 0;
}

沒有任何操作攝像頭捕捉的效果圖如圖四
圖四
這裡寫圖片描述
canny檢測的攝像頭捕捉影象如圖五
圖五
這裡寫圖片描述