opencv 使用二维归一化坐标 (u, v) 将图片转换并显示 c++ 实例
时间: 2024-09-28 13:12:09 浏览: 38
OpenCV库中,二维归一化坐标(u, v)通常用于处理图像中的像素位置,尤其是在处理缩放、裁剪或者映射到其他图像空间时。归一化坐标范围通常是0到1,其中(0, 0)表示原图左上角,(1, 1)代表右下角。
在C++中,如果你想将一张图像按照归一化坐标进行显示,可以这样做:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 加载图像
cv::Mat src = cv::imread("path_to_your_image.jpg", cv::IMREAD_COLOR);
if(src.empty()) { // 检查是否加载成功
std::cout << "Failed to load image." << std::endl;
return -1;
}
// 创建一个新的Mat对象,用于存储归一化后的图像
cv::Mat dst(src.size(), src.type());
for(int u = 0; u < src.rows; ++u) {
for(int v = 0; v < src.cols; ++v) {
double normU = static_cast<double>(u) / src.rows;
double normV = static_cast<double>(v) / src.cols;
// 计算归一化坐标对应的原始像素值,并复制到dst矩阵
dst.at<cv::Vec3b>(u, v) = src.at<cv::Vec3b>(static_cast<int>(normU * src.rows), static_cast<int>(normV * src.cols));
}
}
// 显示归一化后的图像
cv::imshow("Normalized Image", dst);
cv::waitKey(0); // 等待按键关闭窗口
return 0;
}
```
在这个例子中,我们首先读取一个图像,然后遍历每个像素点,计算出归一化的(u, v)坐标对应原始像素的位置,再将该位置的像素复制到新的dst矩阵中。最后,使用`cv::imshow`函数展示归一化后的图像。
阅读全文