VisualStudio2012でOpenCV2.4.2を実行しています。MSERを使用して画像内のテキストを検出したいと思います。私はOpenCVディレクトリで提供されているサンプルMSERサンプルプログラムから始めました。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
static const Vec3b bcolors[] =
{
Vec3b(0,0,255),
Vec3b(0,128,255),
Vec3b(0,255,255),
Vec3b(0,255,0),
Vec3b(255,128,0),
Vec3b(255,255,0),
Vec3b(255,0,0),
Vec3b(255,0,255),
Vec3b(255,255,255)
};
int main( int argc, char** argv )
{
string path;
Mat img0, img, yuv, gray, ellipses;
img0 = imread( argc != 2 ? "puzzle.png" : argv[1], 1 );
if( img0.empty() )
{
if( argc != 2 )
cout << "\nUsage: mser_sample <path_to_image>\n";
else
cout << "Unable to load image " << argv[1] << endl;
return 0;
}
cvtColor(img0, yuv, COLOR_BGR2YCrCb);
cvtColor(img0, gray, COLOR_BGR2GRAY);
cvtColor(gray, img, COLOR_GRAY2BGR);
img.copyTo(ellipses);
vector<vector<Point> > contours;
double t = (double)getTickCount();
MSER()(yuv, contours);
t = (double)getTickCount() - t;
printf( "MSER extracted %d contours in %g ms.\n", (int)contours.size(),
t*1000./getTickFrequency() );
// draw mser's with different colors
for( int i = (int)contours.size()-1; i >= 0; i-- )
{
const vector<Point>& r = contours[i];
for ( int j = 0; j < (int)r.size(); j++ )
{
Point pt = r[j];
img.at<Vec3b>(pt) = bcolors[i%9];
}
// find ellipse (it seems cvfitellipse2 have error or sth?)
RotatedRect box = fitEllipse( r );
box.angle=(float)CV_PI/2-box.angle;
ellipse( ellipses, box, Scalar(196,255,255), 2 );
}
imshow( "original", img0 );
imshow( "response", img );
imshow( "ellipses", ellipses );
waitKey(0);
}
このコードをビルドして実行すると、次の出力が得られます。その後、アプリケーションは応答を停止します。
MSER extracted 1584 contours in 1748.41 ms.
OpenCV Error: Assertion failed (points.checkVector(2) >= 0 && (points.depth() ==
CV_32F || points.depth() == CV_32S)) in unknown function, file
..\..\..\src\opencv\modules\imgproc\src\contours.cpp, line 2019
問題が正確に何であるかについて何か考えはありますか?私は完全に失われました!
外側のforループ内のすべてをコメントアウトしようとしましたが、問題はRotatedRectとfitEllipseの部分にあるようです。完全にはわかりませんが、どんな助けでも大歓迎です!