2

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();           
                }

前もって感謝します!!!

4

0 に答える 0