簡體   English   中英

JavaCV檢測二進制圖像上的驗證碼字母

[英]JavaCV detect captcha letters on a binary image

我是JavaCv的新手。 我的任務是在圖像上找到符號並生成彼此具有單個符號的圖片。 首先,我有這張照片: 在此輸入圖像描述 然后我做閾值並得到這個: 在此輸入圖像描述 我正在嘗試使用cvFindContours然后在每個符號周圍繪制一個矩形,我的代碼:

 String filename = "captcha.jpg";
    IplImage firstImage=cvLoadImage(filename);
    Mat src = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
    Mat dst = new Mat();
   threshold(src, dst, 200, 255, 0);
   imwrite("out.jpg", dst);

    IplImage iplImage=cvLoadImage("out.jpg",CV_8UC1);
    CvMemStorage memStorage=CvMemStorage.create();
    CvSeq contours=new CvSeq();
    cvFindContours(iplImage,memStorage,contours,Loader.sizeof(CvContour.class),CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
    CvSeq ptr;
    CvRect bb;
    for (ptr=contours;ptr!=null;ptr=ptr.h_next()){
        bb=cvBoundingRect(ptr);
        cvRectangle(firstImage , cvPoint( bb.x(), bb.y() ),
                cvPoint( bb.x() + bb.width(), bb.y() + bb.height()),
                CvScalar.BLACK, 2, 0, 0 );

    }
    cvSaveImage("result.jpg",firstImage);
}

我想獲得這樣的輸出: 在此輸入圖像描述 ,但我真的得到了這個: 在此輸入圖像描述

請,需要你的幫助。

你正在為findContour()使用“out.jpg”圖像。
將dst Mat保存為“out.jpg”時,JPEG格式會自動量化原始像素數據並為圖像產生噪音。

將dst保存為“out.png”而不是“out.jpg”,或者將dst Mat直接用於findContour()。

源代碼增加:C ++版本

string filename = "captcha.jpg";
Mat src = imread(filename);
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);
Mat thres;
threshold(gray, thres, 200, 255, 0);

vector<vector<Point>> contours;
vector<Vec4i> hierarchy;

findContours(thres.clone(), contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

Mat firstImage = src.clone();
for(int i=0; i< contours.sizes(); i++)
{
    Rect r = boundingRect(contours[i]);
    rectangle(firstImage, r, CV_RGB(255, 0, 0), 2);
}

imwrite("result.png", firstImage);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM