将wxString转换为OpenCv的std :: string

时间:2012-03-05 20:22:32

标签: c++ opencv wxwidgets

任何人都知道每次代码解析此行时我的应用程序崩溃的原因:

deskew(filename); //filename string

我的声明是这样的:

void deskew(std::string fname);

然后我还使用此代码将我的wxString转换为string:

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

我刚从教程中读到它,但它无效。 顺便说一下,我正在为我的c ++使用wxWidgets。

这是deskew的主体:

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 个答案:

答案 0 :(得分:1)

使用wxString::ToStdString(),即

string fname = path.ToStdString();

编辑:此外,您不会始终使用std::;如果你是using namespace std;那么你完全不需要它;否则std::需要在string和其他STL类型/函数前加上前缀。

答案 1 :(得分:0)

我注意到你有:

deskew(filename); //filename string

但你有

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

那么'angle'参数发生了什么?

答案 2 :(得分:0)

我认为您可以使用

从wxString加载图像
Mat src_img = imread(mywxstring.mb_str().data());

如果它不起作用,请检查图像是否存在,并且imread在路径中需要\\或/。