2012-03-05 58 views
0

任何人知道为什么我的应用程序崩溃每次代码被解析这一行:转换wxString到的std :: string的OpenCV的

deskew(filename); //filename string 

我的声明是这样的:

void deskew(std::string fname); 

然后,我还使用此代码将我的wxString转换为字符串:

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

我刚刚从教程中读到它,但它不工作G。 顺便说一句,我使用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); 
} 

这是我刚刚贴吧都让大家都能看到。

+0

除非我失去了一些东西,你在做什么应该工作(尽管我认为你的意思是'std :: string fname')。可能是其他地方的错误 - 我们可能需要更多的上下文:如何声明/生成'filename'? “歪斜”的身体是什么样的? – dantswain 2012-03-05 20:38:01

+0

您是否在使用调试器来查看“崩溃”的位置?它是否在纠偏方法中的其中一行? – ravenspoint 2012-03-05 20:52:42

+0

不,不是调试器错误。该应用程序正在运行,但是当我输入一个使用去歪斜功能的事件时,就是发生崩溃的地方。我使用windows。 – 2012-03-05 20:55:55

回答

1

使用wxString::ToStdString(),即

string fname = path.ToStdString(); 

编辑:另外,您不使用std::一致;如果你是using namespace std;那么你完全不需要它;否则std::需要前缀string和其他STL类型/函数,无论它们出现在哪里。

+1

但是,先生,我只使用wxwidgets 2.8。 该功能是从2.9开始的吗? – 2012-03-05 20:28:44

+0

@kcirearraveug我不知道,虽然[更改页面](http://docs.wxwidgets.org/2.9.3/overview_changes_since28.html))没有说这样的话。但如果'ToStdString'不可用,那就试试'string(path.ToAscii())'。 – 2012-03-05 20:33:30

+0

这是一个2.9的东西。 'mb_str'应该可以工作,我认为还有另外一个问题。 – dantswain 2012-03-05 20:35:40

0

我注意到你有:

deskew(filename); //filename string 

,但你必须

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

所以发生了什么事 '角度' 参数?

+0

对不起,先生,但在我的第一个代码中,我故意不包括这个类,这样它就不会混淆读者。 但在我的程序中,我写过这样,'Document-> deskew(fname,wxAtoi(text));'Document是来自DImage类。 – 2012-03-05 21:04:18

+0

你可能不会混淆你的读者(谁可以说?),但你肯定会误导他们。请发布您的真实代码,否则我们无法帮助您。 – ravenspoint 2012-03-05 21:06:43

0

我想你可以加载wxString图像与

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

如果它不工作,检查图像是否存在,以及imread需要\\或/的路径。