呼叫海康攝像頭實時識別數字牌數字
專案所需,呼叫網路攝像頭來完成對乙個數字牌的識別,用模板匹配的方法分離出數字
用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...