OpenCV:在QImage上使用GaussianBlur或Sobel Derivatives
OpenCV: Use GaussianBlur or Sobel Derivatives on QImage
我希望你能帮助我。
我正在使用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);
}
我找到了解决方案。这很奇怪,但是当我这样做时:
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
相关文章:
- Sobel 滤波算法 (C++) (无库)
- OpenCV GaussianBlur 内核大小 0.
- Opencv Sobel 算子是否计算相关性
- 在 c++ 中执行 sobel 过滤器函数时我做错了什么
- 利用mpi进行sobel边缘检测
- OpenCV Sobel过滤器导致几乎完全黑色的图像
- OpenCV:在QImage上使用GaussianBlur或Sobel Derivatives
- 我需要修改 Sobel 内核以进行对角线边缘检测.OpenCV和C++
- Sobel 边缘检测错误(OpenCV 错误:断言失败 (DIMS<=2&&Data&&(无符号)i0)
- Sobel滤波器输出来自opencv和Matlab不同
- 使用OpenGL ES在C/C++中实现Sobel滤波器
- 我在pgm映像上有一个用于sobel运算符的c++代码,我的代码进行了编译,但未能给出所需的结果
- OpenCV中的Sobel导数
- 对于大于 3 x 3 的尺寸,OpenCV 的 Sobel 过滤器的核系数是多少?
- 为什么cv::gpu::GaussianBlur比cv::Gaussian Blur慢