使用Opencv提取图像的公共部分
Extract common part of images with Opencv
我正在编写一个程序来查找图像之间的差异。目前,我正在寻找AKAZE的功能,所以我有这两张图片的共同点。问题是这两个图像只有一个共同点。如何从两幅图像中提取共同部分?为了更好地解释:我需要从第一张图像中提取公共部分,然后从第二张图像中,这样我就可以做absdiff
来寻找差异。我正在用c++编程
感谢大家!
您应该将第一个图像扭曲到第二个图像上。您可以使用关键点对应关系给出的findHomography
和perspectiveTransform
函数。你可以在这里找到你需要的大部分代码。
更新
顺便说一句,我今天不得不做基本上相同的事情。它在灰度图像(Mat1b
(上进行了测试,但只需要进行微小的更改即可应用于rgb图像(Mat3b
(。这里是代码的相关部分:
Mat1b A = imread("...");
Mat1b B = imread("...");
vector<Point2f> ptsA;
vector<Point2f> ptsB;
// Fill ptsA, ptsB with the points given by the match of your descriptors.
Mat H = findHomography(ptsA, ptsB, CV_RANSAC); // With ransac is more robust to outliers
Mat1b warpedA;
warpPerspective(A, warpedA, H, B.size());
// Now compute diff
Mat1b res;
absdiff(warpedA, B, res);
// res is what you are looking for!
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- c++库的公共头文件中应该包含什么
- 将公共但非静态的成员函数与ALGLIB集成
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- C++从另一个类访问公共静态向量的正确方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何找到2个单链表的公共节点
- 平均图像时图像损坏
- 将地址分配给本地指针后,公共对象的变量将消失
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 公共与私人继承
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 如何从另一个文件继承私有成员变量和公共函数
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- maya自定义图像平面中的公共可见自定义属性
- OpenCV检测手部和比较图像
- 使用Opencv提取图像的公共部分
- 尝试从深度图像中提取手部轮廓时出现无效矩阵错误