私cvFindContours
はナンバープレートの数字セグメントを見つけるために使用しますが、うまく機能します。その後、グレースケール(OCR用)に変換したいのですが、使うのcvCvtColor
ですが、とても混乱します。
プレート画像:
私が得たいくつかの画像(後cvCvtColor
):
それはとても奇妙です。うまくいくものもあれば、うまくいかないものもあります。誰でも私を助けることができますか?
ああ、これは私のコードです:
CvSeq contours = new CvSeq();
IplImage contour_img = cvCreateImage( cvGetSize( plateImageGrey ), IPL_DEPTH_8U, 1);
cvZero( contour_img );
CvMemStorage storage = CvMemStorage.create();
cvFindContours( plateImageGrey, storage, contours, Loader.sizeof(CvContour.class), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE );
while(contours != null)
{
if(CV_IS_SEQ_CONTOUR(contours))
{
cvDrawContours( contour_img, contours, cvScalarAll(255), cvScalarAll(255), CV_C, CV_C, CV_C );
CvRect boundingRect = cvBoundingRect(contours,1);
if(((boundingRect.height()/boundingRect.width()) >= 2.0) && ((boundingRect.height()/boundingRect.width()) <= 3.0) && (area >= 1000))
{
CvRect cr = new CvRect(boundingRect.x() - 5 , boundingRect.y() - 5, boundingRect.width() + 10, boundingRect.height() + 10);
cvSetImageROI(plateImage, cr);
IplImage charImage = cvCreateImage(cvGetSize(plateImage), plateImage.depth(), plateImage.nChannels());
cvCopy(plateImage, charImage);
cvResetImageROI(plateImage);
IplImage charImageGrey = cvCreateImage( cvGetSize( charImage ), IPL_DEPTH_8U, 1);
cvCvtColor( charImage, charImageGrey, CV_BGRA2GRAY);
Bitmap charImageBitmap = Bitmap.createBitmap(charImageGrey.width(), charImageGrey.height(), Bitmap.Config.ALPHA_8);
charImageBitmap.copyPixelsFromBuffer(charImageGrey.getByteBuffer());
charImageBitmap = charImageBitmap.copy(Bitmap.Config.ARGB_8888, true);
}
}
contours = contours.h_next();
}
前もって感謝します!!!