我正在尝试制作一个程序,它可以从两个相同的图片中找到齐次坐标,但是对象已被旋转或翻译,然后拍摄第一张图片并将其叠加在第二张图片上。
问题是,我得到了一个Matrix错误,因为我有不同的矩阵大小。
我找到了解决方案,我需要将其应用于旋转和平移以获得第二张图片(值,我必须在第二个矩阵上应用)
这是我的代码:
Size size(image2.cols, image2.rows);
Mat dest = cv::Mat::zeros(image2.rows, image2.cols, CV_32FC2);
warpAffine(image2, dest, t, size);
namedWindow("manipulated img", CV_WINDOW_NORMAL);
imshow("manipulated img", dest);
Mat output;
cout << image1.size() << endl;
cout << dest.size() << endl;
bitwise_and(dest, image1, output);
//subtract(dest, image1, output);
namedWindow("output img", CV_WINDOW_NORMAL);
imshow("output img", output);
我收到以下错误:
> [3722 x 2937]
> [3722 x 2932]
> OpenCV Error: Sizes of input arguments do
> not match (The operation is neither 'a rray op array' (where arrays
> have the same size and type), nor 'array op scalar' , nor 'scalar op
> array') in cv::binary_op, file C:\builds\master_PackSlave-win32
> -vc12-shared\opencv\modules\core\src\arithm.cpp, line 1573
我想我知道问题是什么,但我不知道解决方案是什么。
矩阵具有不同的大小
image1.size() = [3722 x 2937]
dest.size() = [3722 x 2932]
我能做些什么来解决这个问题?
答案 0 :(得分:1)
我怀疑您只需将dest
的大小设为image1
,而不是image2
。 warpAffine
很有可能处理好。
答案 1 :(得分:0)
像这样:
src.copyTo(dst(Rect(left, top, src.cols, src.rows))); // left and top are the x,y position of where this Mat is going