【问题标题】:Why image is not merging为什么图像不合并
【发布时间】:2014-06-27 03:49:00
【问题描述】:

我正在尝试在下面的代码中混合 2 张图片

Mat input = imread ("E:\\img1.jpg");
Mat image;
Mat img12=imread("D:\\vig.png",-1);  // load 'as is', don't convert to bgr !!
Mat ch[4]; 
split(img12,ch);
Mat im2 = ch[3];              // here's the vignette
im2 = 255 - im2; 
im2.convertTo(im2 , input.type());
resize(im2,image,Size(input.rows,input.cols));
blending_overlay(image , input , image);
imshow ("image",image);
waitKey();

img12 上的不同操作是因为它的形状,代码给了我运行时错误

【问题讨论】:

  • resize(im2,image,Size(input.rows,input.cols)); // 大小为 w,h, Mat 为 rows,cols
  • 更改值后仍然出现相同的错误

标签: c++ image opencv image-processing computer-vision


【解决方案1】:

正如@berak 评论的那样,您没有正确使用cv::Size,其第一个参数是width,第二个参数是height(不是相反)。

改变

resize(im2, image, Size(input.rows, input.cols));

resize(im2, image, Size(input.cols, input.rows));

更新:您还需要寻址image,它被传递给函数blending_overlay。它只有一个频道,但您正尝试从中访问其他频道:

float target = (float)img1.at<uchar>(i, 3*j+c)/255.0 ; // img1 = image here

【讨论】:

  • @AHF 显示blending_overlay()的定义。
  • 我更改了 Mat image2 = Mat(input.size(),input.type());blending_overlay(image , input , image2); 但仍然是同样的错误
  • @AHF 错误在你传入的第一个参数上,仍然是image
  • @AHF 就像我说的,那是因为,im2 只有一个频道,而您试图在函数中访问它的其他频道。
  • 它解决了,但是由于渠道影响了结果,有什么办法可以更好地解决它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多