openCV銀行卡號識別

2021-07-05 04:18:37 字數 2655 閱讀 9286

銀行卡的識別與車牌識別都是類似的,有了opencv方便了很多,許多函式都不要自己動手去寫。

// #include "stdafx.h"  

#include "cv.h"  

#include "highgui.h"  

#include "cxcore.h"  

int main(int argc, char* argv)

;int tempcount = 0;

for (cvseq* c = contours; c != null; c = c->h_next) 

cvdrawrect(imgsrc, cvpoint(rc.x-10, rc.y-3), cvpoint(rc.x + rc.width-6, rc.y + rc.height-3), cv_rgb(255, 0, 0));

iplimage* imgno = cvcreateimage(cvsize(rc.width, rc.height), ipl_depth_8u, 3);// //為分割後的單個字元分配乙個儲存空間

cvsetimageroi(imgsrc, rc); //基於給定的矩形設定影象的roi(感興趣區域)

cvcopyimage(imgsrc, imgno);//將roi複製到imgno

cvresetimageroi(imgsrc);//釋放基於給定的矩形設定影象的roi

sprintf(szname, "wnd_%d", idx++);

cvnamedwindow(szname);

cvshowimage(szname, imgno); //如果想切割出來的影象從左到右排序,或從上到下,可以比較rc.x,rc.y;  

iplimage* imgqie = imgno;

iplimage* imgqiegray = cvcreateimage(cvgetsize(imgqie), ipl_depth_8u, 1);//建立灰度圖,定義灰度圖

cvcvtcolor(imgqie, imgqiegray, cv_bgr2gray);//灰度圖的轉換函式

cvthreshold(imgqiegray, imgqiegray, 70, 255, cv_thresh_binary_inv);// cv_thresh_binary_inv使得背景為黑色,字元為白色,這樣找到的最外層才是字元的最外層  

cvshowimage("灰度二", imgqiegray);//顯示灰度影象

int count1 = cvfindcontours(imgqiegray, storage, &contours1, sizeof(cvcontour), cv_retr_external);//輪廓檢驗返回的是輪廓的個數

printf("輪廓個數:%d", count1);

//巢狀在裡面再進行處理,在定位出後在處理。

int idx1 = 0;

//int i = 0;

char szname1[56] = ;

int i = 0;

//int a[100];

cvrect rc1[100],temp;

int tempcount1 = 0;

for (cvseq* c1 = contours1; c1 != null; c1 = c1->h_next)

for (int j = 0; j <19; j++)

}for (i = 0; i

cvdrawrect(imgqie, cvpoint(rc1[i].x, rc1[i].y), cvpoint(rc1[i].x + rc1[i].width, rc1[i].y + rc1[i].height), cv_rgb(255, 0, 0));

iplimage* imgno1 = cvcreateimage(cvsize(rc1[i].width, rc1[i].height), ipl_depth_8u, 3);// //為分割後的單個字元分配乙個儲存空間

cvsetimageroi(imgqie, rc1[i]); //基於給定的矩形設定影象的roi(感興趣區域)

cvcopyimage(imgqie, imgno1);//將roi複製到imgno

cvresetimageroi(imgqie);//釋放基於給定的矩形設定影象的roi

sprintf(szname1, "wnd_%d", idx1++);

cvnamedwindow(szname1);

cvshowimage(szname1, imgno1); //如果想切割出來的影象從左到右排序,或從上到下,可以比較rc.x,rc.y;  

cvreleaseimage(&imgno1);

}cvreleaseimage(&imgno);

}cvnamedwindow("src");

cvshowimage("src", imgsrc);

cvwaitkey(0);

cvreleasememstorage(&storage);

cvreleaseimage(&imgsrc);

cvreleaseimage(&img_gray);

cvreleaseimage(&imgqie);

//cvreleaseimage(&imgqiegray);

cvdestroyallwindows();

return 0;

}很多在吧字元切割後不知道怎麼排序,上面有完整的**,希望可以幫助大家,大家一起進步。

關於銀行卡號識別

絕大部分的銀行卡號遵循luhn演算法,luhn演算法簡述如下 luhn是著名的校驗和演算法也叫模10演算法,主要應用於解決銀行卡號,社保號等重要資訊傳輸出錯問題。先來解釋下演算法原理,校驗和型別的演算法,一般是id 校驗號,校驗號和id號的每位相關,如果出錯,通過某種運算能檢測出這種改動。借用維基百...

通過銀行卡號識別歸屬銀行,php方式

這個例子不是很全,要做到齊全必須使用資料庫字典來索引,而且資料量龐大,建議生產使用時限制幾大行就行,直接不支援其他小行。此案例拋磚引玉 銀行卡資訊識別相關類 把bin號轉化為長整形,再把各個銀行卡的bin號做成有序表。通過二分查詢的方法,找到bin號在有序表的位置,然後讀出銀行卡的資訊。todo 字...

銀行卡號規則

答案一 前6位數字為發卡銀行識別號 bin 由iso國際組織統一制定。最後一位是校驗位,由前面組成卡號的十多位數字 常見的iso卡號有13位 16位 19位 通過特定演算法計算。前6位和最後一位之間的數字為金融機構自定義的卡號,有些銀行採用發卡地代號加卡序號的方式編碼 有些銀行的卡則是全國大序列。只...