呼叫海康攝像頭實時識別數字牌數字

2021-10-11 16:15:47 字數 4718 閱讀 4394

呼叫海康攝像頭實時識別數字牌數字

專案所需,呼叫網路攝像頭來完成對乙個數字牌的識別,用模板匹配的方法分離出數字

用vs2015+opencv3.4.3完成

#include

#include

#include

//使用命名空間

using namespace cv;

videocapture cap

("rtsp:"

);

部分重要**以及除錯過程

cvtcolor

(mframe, medges, cv_bgr2gray)

;//影象轉換為灰度

medges = medges *2;

imshow

("灰度圖"

, medges)

;//threshold(medges, medges, 120, 255, cv_thresh_binary);

//adaptivethreshold(medges, medges, 255, adaptive_thresh_gaussian_c, thresh_binary,4, 0);

//adaptivethreshold(grayscal, 255, cv2.adaptive_thresh_gaussian_c, cv2.thresh_binary, 155, 1)

//imshow("濾波圖", medges);

mat element =

getstructuringelement

(morph_rect,

size(17

,3))

; mat elementt =

getstructuringelement

(morph_rect,

size(15

,15))

; mat element2 =

getstructuringelement

(morph_rect,

size(1

,1))

; mat element3 =

getstructuringelement

(morph_rect,

size(1

,2))

;//morphologyex(medges, tophat, morph_tophat, element, point(-1, -1));

//imshow("tophat", tophat);

//morphologyex(tophat, blackhat, morph_blackhat, element, point(-1, -1));

//add(blackhat, tophat, medges);

//subtract(tophat, blackhat, medges);

gaussianblur

(medges, medges,

size(1

,1),

0,0)

;//imshow("濾波圖", medges);

canny

(medges, medges,

500,

1000,3

);//邊緣檢測 //低於閾值1的畫素點會被認為不是邊緣;

//高於閾值2的畫素點會被認為是邊緣;

//imshow("canny", medges);//顯示

//sobel(medges, medges, cv_8u, 2, 0, 3); //利用sobel運算元進行二階水平差分,求取垂直邊緣

cv::namedwindow

("邊緣檢測"

, cv_window_normal)

;imshow

("邊緣檢測"

, medges)

;//顯示

//morphologyex(medges, medges, morph_open, element2); //開運算

morphologyex

(medges, medges, morph_erode, element2)

;//腐蝕運算

morphologyex

(medges, medges, morph_erode, element3)

;//腐蝕運算

//morphologyex(medges, medges, morph_dilate , element2); //膨脹運算

//imshow("形態學", medges);//顯示

morphologyex

(medges, medges, morph_dilate, element)

;//膨脹運算

//morphologyex(medges, medges, morph_erode, elementt); //腐蝕運算

//morphologyex(medges, medges, morph_erode, elementt); //閉運算

//morphologyex(medges, medges, morph_erode, elementt); //閉運算

//morphologyex(medges, medges, morph_open, element); //開運算

//medianblur(medges, medges, 5);

cv::namedwindow

("形態學處理"

, cv_window_normal)

;imshow

("形態學處理"

, medges)

;//顯示

void

findminarearect

(mat &s, mat &src)

/// 畫多邊形輪廓 + 包圍的矩形框

mat drawing = mat:

:zeros

(src.

size()

, cv_8uc3)

; mat image_cut[

1000];

//從img中按照rect進行切割,此時修改image_cut時image中對應部分也會修改,因此需要copy

mat image_copy[

1000];

//clone函式建立新的

int n =1;

for(

int i =

0; i < contours.

size()

; i++)}

}

int

getcolsum

(mat src,

int col)

return sum;

}

//統計所有行畫素的總和

intgetrowsum

(mat src,

int row)

return sum;

}

//上下切割

void

cuttop

(mat& src, mat& dstimg)

}for

(; i < src.rows; i++)}

int height = bottom - top;

rect rect(0

, top, src.cols, height)

;//構造乙個矩形,引數分別為矩形左邊頂部的x座標、y座標,右邊底部的x座標、y座標(左上角座標為0,0)

dstimg =

src(rect)

.clone()

;}

//左右切割

intcutleft

(mat& src, mat& leftimg, mat& rightimg)}if

(left ==0)

//繼續掃瞄

for(

; i < src.cols; i++)}

int width = right - left;

//分割的寬度則為right - left

rect rect

(left,

0, width, src.rows)

;//構造乙個矩形,引數分別為矩形左邊頂部的x座標、y座標,右邊底部的x座標、y座標(左上角座標為0,0)

leftimg =

src(rect)

.clone()

; rect rectright

(right,

0, src.cols - right, src.rows)

;//分割後剩下的原圖

rightimg =

src(rectright)

.clone()

;cuttop

(leftimg, leftimg)

;//上下切割

return0;

}

//獲取所有畫素點和

void

getpxsum

(mat& src,

int& a)

}}

//數字識別

intgetsubtract

(mat& src,

int templatenum)

} cout <<

"識別的數字是:"

<< endl;

cout << serienum << endl;

return serienum;

}

python呼叫海康威視的攝像頭,實時顯示監控內容

沒有任何的延遲,至於畫素與這個攝像機原本的畫素是一致的 python pycharm 安裝opencv python就可以了 1 安裝opencv python方法如下 2 用網線將海康威視攝像頭與電腦連線在一起 或者用交換機,在乙個交換機下面 海康攝像頭的預設ip是192.168.1.64 在乙個...

C 攝像頭實時 4執行緒人臉識別demo

效率有點低,大家看看 開可以節省時間?源 整個專案使用虹軟技術完成開發 說實話,為了提高識別效率,我也是竭盡所能,幹了不少自認為的優化,如有興趣聽我說說。第一部分 單執行緒時候的各種折騰 一 折騰lpasvloffscreen 話說這個lpasvloffscreen的結果文件裡面沒有說明,或者是我沒...

攝像頭手寫數字識別(基於KNN演算法)

攝像頭識別手寫數字 ubuntu16.04,opencv2,ide qt5.9.1creator,編譯器 cmake 1 寫了主程式main.cpp將開啟攝像頭並處理訓練資料放在主函式裡了,讀取資料,提取特徵還是呼叫的原程式 原程式為windows下的,讀取檔案的路徑需要更改,原dealdata.h...