#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都有,如下...