銀行卡的識別與車牌識別都是類似的,有了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位和最後一位之間的數字為金融機構自定義的卡號,有些銀行採用發卡地代號加卡序號的方式編碼 有些銀行的卡則是全國大序列。只...