【问题标题】:OpenCV: Use GaussianBlur or Sobel Derivatives on QImageOpenCV:在 QImage 上使用 GaussianBlur 或 Sobel 导数
【发布时间】:2012-06-13 15:29:13
【问题描述】:

希望你能帮助我。

我正在使用 QT 并尝试对图像的边缘进行简单的检测。但是当我启动时我的程序崩溃了

cv::GaussianBlur( src, src, cv::Size(3,3), 0, 0, cv::BORDER_DEFAULT );

cv::Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, cv::BORDER_DEFAULT );

这是我的代码:

QImage      *image1;    
IplImage    *cv_image1;

image1 = new QImage("./image.png");  // Format is ARGB32
cv_image1 = QImage2IplImage(image1);
cv::Mat src(cv_image1);

cv::imshow(window_name, src); // Work Well
cv::Mat src_gray;
int scale = 1;
int delta = 0;
int ddepth = CV_16S;

cv::GaussianBlur(src, src, cv::Size(3,3), 0, 0, cv::BORDER_DEFAULT); //Crash Here
cv::imshow( window_name, src);

我认为这是格式的问题。 但在另一个使用 ARGB32 QIMAGES 的程序中,此代码运行良好。 谢谢。

【问题讨论】:

    标签: c++ qt opencv


    【解决方案1】:

    尝试使用此函数进行适当的 QImage 到 cv::Mat 转换,你应该没问题(我还包括从 cv::Mat 到 QImage 的转换):

    cv::Mat cvmat_from_qimage(const QImage& qimage)
    { 
        cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine()); 
        cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3 ); 
        int from_to[] = { 0,0,  1,1,  2,2 }; 
        cv::mixChannels( &mat, 1, &mat2, 1, from_to, 3 ); 
        return mat2; 
    }
    
    QImage qimage_from_cvmat(const cv::Mat& mat)
    { 
        cv::Mat rgb; 
        cvtColor(mat, rgb, CV_BGR2RGB); 
        return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888); 
    }
    

    【讨论】:

    • 感谢这种转换方法。但这并没有解决我的问题。我将重新尝试将 OpenCV 添加到我的项目的干净版本中。
    • 您的代码崩溃时收到的确切消息是什么?
    • 好的,我在 QTCreator 的应用程序输出中收到“退出代码 -1073741819”。
    【解决方案2】:

    我找到了解决方案。 这很奇怪,但当我这样做时:

    cvtColor(src, src_gray, CV_RGB2GRAY );
    cv::Sobel(src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, cv::BORDER_CONSTANT);
    

    没有 cv::GaussianBlur 它运行良好。我只是将最后一个参数更改为 cv::BORDER_CONSTANT

    【讨论】:

      猜你喜欢
      • 2016-01-03
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      相关资源
      最近更新 更多