opencv::mixchannels 分段错误

Posted

技术标签:

【中文标题】opencv::mixchannels 分段错误【英文标题】:opencv::mixchannels segmentation fault 【发布时间】:2015-06-09 10:02:04 【问题描述】:

我想创建一个4通道的图像,图像输出是RGB图像和灰度图像的混合, 我用 C++ 开发了这段代码:

 cv::Mat cv_img ( height, width, CV_8UC4 heredcv::Scalar(1,2,3,4) );
 cv::Mat cv_img_rgb = ReadImageToCVMat(filename_rgb, height, width, is_color);
 cv::Mat cv_img_gray = ReadImageToCVMat(filename_gray, height, width, !is_color);
 cv::Mat out[] =  cv_img_rgb, cv_img_gray ;
 int from_to[] =  0,0, 1,1, 2,2, 3,3 ;
 cv::mixChannels( &cv_img, 1, out, 2, from_to, 4); 

问题是“分段错误”

ReadImageToCVMat 是这样的函数:

cv::Mat ReadImageToCVMat(const string& filename,
const int height, const int width, const bool is_color) 
 cv::Mat cv_img;
 int cv_read_flag = (is_color ? CV_LOAD_IMAGE_COLOR :
CV_LOAD_IMAGE_GRAYSCALE);
 cv::Mat cv_img_origin = cv::imread(filename, cv_read_flag);
 if (!cv_img_origin.data) 
LOG(ERROR) << "Could not open or find file " << filename;
return cv_img_origin;
 
if (height > 0 && width > 0) 
cv::resize(cv_img_origin, cv_img, cv::Size(width, height));
 else 
cv_img = cv_img_origin;

return cv_img;

【问题讨论】:

【参考方案1】:

看起来你混淆了cv::mixChannels 的参数。假设 cv_img 是您的目标缓冲区,它应该是这样的:

cv::Mat src[] =  cv_img_rgb, cv_img_gray ;
int from_to[] =  0,0, 1,1, 2,2, 3,3 ;
cv::mixChannels( src, 2, &cv_img, 1, from_to, 4);

【讨论】:

以上是关于opencv::mixchannels 分段错误的主要内容,如果未能解决你的问题,请参考以下文章

这段代码一次执行良好,另一次出现分段错误

为啥这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现分段错误?

python跟踪分段错误

带有 std::promise 的 C++11 分段错误

C++:当我添加看似无关的代码行时,分段错误消失了

为啥调用 glCreateShader 时这个 OpenGL 着色器分段错误?