gpt4 book ai didi

c++ - OpenCV:在 QImage 上使用 GaussianBlur 或 Sobel 导数

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:33 26 4
gpt4 key购买 nike

我希望你能帮助我。

我正在使用 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 的程序中,这段代码运行良好。谢谢。

最佳答案

尝试使用此函数将 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);
}

关于c++ - OpenCV:在 QImage 上使用 GaussianBlur 或 Sobel 导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11018290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com