機讀卡的識別

2021-08-29 16:25:58 字數 4350 閱讀 8083

#include #include#includeusing namespace std;

using namespace cv;

int mark[4][2][2];

mat image; //原圖

mat image1; //灰度圖

mat image2; //二值圖

mat imagebox2;//最大域二值圖

rect maxrect; //最大域大小

rect maxabcrect;//填圖區

mat imagebox;//最大域原圖

mat imageabc2;//選擇題二值圖

mat imageabc;//選擇題原圖

mat imageblank2;//填空題二值圖

mat imageblank;//填空題原圖

char answer[1000];

void abc()

cvtcolor(imageboxtest, imageboxtest, cv_rgb2gray);

adaptivethreshold(imageboxtest, imageboxtest, 255, adaptive_thresh_gaussian_c, thresh_binary_inv, 21, 10); //自適應二值化

maxabcrect.x = lines[0][0]; maxabcrect.y = lines[0][1] + 8; //選擇題

maxabcrect.width = lines[0][2] - lines[0][0];

maxabcrect.height = lines[1][1] - lines[0][1] - 8;

imageabc2 = imageboxtest(maxabcrect);

imageabc = imagebox(maxabcrect);

maxabcrect.x = lines[1][0]; maxabcrect.y = lines[1][1]; //填空題

}//找到最大的連通域

maxrect = boundingrect(maxcontour);//計算外圍的矩形邊框

imagebox = image(maxrect);//得到最大域的原圖

imagebox2 = imagecanny(maxrect);//得到最大域的二值圖

mat imageboxtest = imagebox.clone();//建立乙個和imagebox相同的影象

vectorlines;

houghlinesp(imagebox2, lines, 1, cv_pi / 180, 190, 100, 13);

for (size_t i = 0; i < lines.size(); i++)

//使用霍夫變換進行劃線

cvtcolor(imageboxtest, imageboxtest, cv_rgb2gray);

adaptivethreshold(imageboxtest, imageboxtest, 255, adaptive_thresh_gaussian_c, thresh_binary_inv, 21, 10); //自適應二值化

vectorcorners;

vectorcornerpos(4);

vectorcornertrans(4);//四個角點

int j = 0;

point center;

center.x = cvround(maxrect.width / 2);

center.y = cvround(maxrect.height / 2);//對邊界取整

goodfeaturestotrack(imageboxtest, corners, 2000, 0.01, 10, mat(), 3, true, 0.04);//角點搜尋

int maxline;

maxline = sqrt(center.x*center.x + center.y*center.y) + 1;

for (unsigned int i = 0; i < corners.size(); i++) }

cornertrans[0].x = imagebox.cols; cornertrans[0].y = 0;

cornertrans[1].x = 0; cornertrans[1].y = imagebox.rows;

cornertrans[2].x = imagebox.cols; cornertrans[2].y = imagebox.rows;

cornertrans[3].x = 0; cornertrans[3].y = 0;//根據的座標確定角點

mat transform = getperspectivetransform(cornerpos, cornertrans); //獲得透視變換矩陣

warpperspective(imagebox, imagebox, transform, imageboxtest.size(), inter_linear);//進行透視變換

cvtcolor(imagebox, imagebox2, cv_rgb2gray);

adaptivethreshold(imagebox2, imagebox2, 255, adaptive_thresh_gaussian_c, thresh_binary_inv, 21, 10); //自適應二值化

abc();//摳出塗改區域

showabc(); //找塗抹區

showmath();

imshow("識別後的", image);

cout << "題號 答案" << endl << endl << "選擇題:" << endl;

for (int i = 1; i < 53; i++)

waitkey(0);

return 0;

}

基於OpenCV的簡單機讀卡識別

2.2 影象識別 三 執行結果 四 總結 ps 以前的c 風格真的慘不忍睹,而且沒有注釋,23333 這是這個程式需要識別的機讀卡 2.1.1 影象的二值化 一般情況我們需要識別的基本都是三通道的彩色影象。而影象的處理一般都會需要講這些影象進行二值化的處理,讓整個影象呈現出明顯的只有黑和白的視覺效果...

人臉識別機CCC認證

刷臉終端ccc認證,移動支付裝置3c認證,人臉識別ccc認證,終端刷卡機ccc認證,人臉識別機ccc認證,人臉識別ce認證 ccc認證申請資料提供清單及檢查要求 下面讓我們詳細的了解下企業做ccc認證必須達到的幾個條件 第一 有營業執照 第二 公司生產的產品在3c認證強制產品列表內 第三 公司要有自...

NFC讀卡在fragment中的應用

今天獨山子巡檢更換了新終端,隨之而來的問題是之前rfid標籤讀取硬體 之前是通過介面直接獲取 沒有了,而是用了nfc模組,然後就看了看api,以及google了下。使用很簡單,就三個步驟 first 在mainifest檔案宣告許可權以及在目標activity下新增action,這些api都有,如下...