Преобразование wxString в std :: string для OpenCv - PullRequest
0 голосов
/ 06 марта 2012

Кто-нибудь знает, почему мое приложение вылетает каждый раз, когда код разбирает эту строку:

deskew(filename); //filename string

Мое объявление выглядит так:

void deskew(std::string fname);

И затем я также использовал этот код для преобразованиямоя wxString в строку:

string fname = string(path.mb_str());

Я только что прочитал это из учебника, но он не работает.И, между прочим, я использую wxWidgets для своего c ++.

вот тело рабочего стола:

void DImage::deskew(string filename, unsigned int angle)
{

if (filename == "")
    return;
Mat img = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);

vector<Point> points;
Mat_<uchar>::iterator it = img.begin<uchar>();
Mat_<uchar>::iterator end = img.end<uchar>();
for (; it != end; ++it)
  if (*it)
    points.push_back(it.pos());

RotatedRect box = minAreaRect(Mat(points));

Mat rot_mat = getRotationMatrix2D(box.center, angle, 1);

Mat rotated;
warpAffine(img, rotated, rot_mat, img.size(), INTER_CUBIC);

Size box_size = box.size;
if (box.angle < -45.)
  swap(box_size.width, box_size.height);
Mat cropped;
  getRectSubPix(rotated, box_size, box.center, cropped);

//imshow("Original", img);
//imshow("Output", rotated);
//imshow("Cropped", cropped);

imwrite("icons/DESKEW.png", cropped);
waitKey(0);
}

Вот оно, я просто вставил все это, так что всеВы можете видеть.

Ответы [ 3 ]

1 голос
/ 06 марта 2012

Использование wxString::ToStdString(), т.е.

string fname = path.ToStdString();

Редактировать: Кроме того, вы не используете std:: постоянно; если вы using namespace std;, тогда вам это вообще не нужно; в противном случае std:: необходимо поставить префикс string и другие типы / функции STL, где бы они ни возникали.

0 голосов
/ 06 марта 2012

Я думаю, что вы можете загрузить изображение из wxString с помощью

Mat src_img = imread(mywxstring.mb_str().data());

Если это не сработает, убедитесь, что изображение существует, и что в путях нет необходимости читать \\ или /.

0 голосов
/ 06 марта 2012

Я заметил, что у вас есть:

deskew(filename); //filename string

, но у вас есть

void DImage::deskew(string filename, unsigned int angle)

Так что же случилось с параметром 'angle'?

...