vector<Point2f> 转cv::remap 可使用数据
时间: 2024-09-28 14:11:46 浏览: 36
嵌入式系统/ARM技术中的一种在不支持Remap的系统中构建JFFS2的实现
`vector<Point2f>` 是一个包含 OpenCV 中 `Point2f` 类型元素的动态数组,`Point2f` 是一个二维浮点数点,通常用于表示图像中的像素坐标。如果你想将这样的向量转换用于 `cv::remap` 函数,该函数用于图像的空间变换,你需要的是这两个关键信息:
1. **源图像的一组坐标**:`vector<Point2f>` 里的所有点对应于原图像上需要映射的位置。这通常是输入图像上的特征点或者兴趣区域。
2. **目标图像的大小**:`remap` 需要知道新的图像尺寸,以便计算每个源点的新位置。
当你将 `vector<Point2f>` 的内容传递给 `cv::remap` 的 `src` 参数时,`dest` 参数应该是一个同样大小的矩阵,用来存储新映射后的像素值。如果你已经有了目标图像的坐标,可以先创建一个与目标图像相同的矩阵,然后通过提供的映射规则填充。
```cpp
cv::Mat destMap = cv::Mat::zeros(targetSize, CV_32FC1); // 或者指定其他深度,如 CV_8UC3 如果是彩色图像
for (const auto& point : sourcePoints) {
Point2f mappedPoint = calculateMappedPoint(point, oldImageSize, targetSize);
destMap.at<float>(mappedPoint.y, mappedPoint.x) = oldImage.at<cv::Vec3b>(point.y, point.x); // 将旧图象的像素复制到新位置
}
cv::remap(oldImage, result, src, destMap, interpolationMethod);
```
其中,`calculateMappedPoint` 是一个自定义函数,根据你的空间变换算法计算新坐标。
阅读全文