银行卡号码提取
今天闲着无聊,做了一下银行卡卡号的roi获取。
记录下实验步骤:
- 图片灰度化
cvtColor(images, gray, COLOR_BGR2GRAY);
- 采用OSTU方式二值化
threshold(gray,binary,0,255,THRESH_BINARY_INV|THRESH_OTSU);
- 先对二值化图片开操作,然后膨胀操作
Mat kernel = getStructuringElement(MORPH_RECT,Size(10,2),Point(-1,-1));
Mat erode_dst;
morphologyEx(binary,erode_dst,MORPH_OPEN,kernel,Point(-1,-1),2);
erode(erode_dst, erode_dst, kernel, Point(-1, -1), 4);
4.发现轮廓
vector<vector<Point>> controus;
findContours(erode_dst,controus,RETR_LIST,CHAIN_APPROX_SIMPLE,Point());
注意这里选择参数RETR_LIST 或者RETR_TREE,不要用RETR_EXTERNAL
5.根据长宽比,得到具体ROI
for (size_t t = 0; t < rets.size(); t++) {
if (rets[t].width > rets[t].height * 10) {
rectangle(images, rets[t], Scalar(0, 0, 255), 2, 8);
roi = images(rets[t]).clone();
}
}