下采样:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取图像
cv::Mat src = cv::imread("C:/Users/10623/Pictures/adf4d0d56444414cbeb809f0933b9214.png");
if (src.empty()) {
std::cout << "无法加载图像" << std::endl;
return -1;
}
// 创建一个与源图像同样大小的 Mat 对象,用于存储结果
cv::Mat dst1,dst2,dst3;
// 使用 pyrDown 进行向下采样
cv::pyrDown(src, dst1);
cv::pyrDown(dst1, dst2);
cv::pyrDown(dst2, dst3);
// 显示原始图像和下采样后的图像
cv::imshow("Original Image", src);
cv::imshow("Downsampled Image", dst1);
cv::imshow("2",dst2);
cv::imshow("3",dst3);
cv::waitKey(0);
return 0;
}
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取图像
cv::Mat src = cv::imread("path_to_your_image.jpg");
if (src.empty()) {
std::cout << "无法加载图像" << std::endl;
return -1;
}
// 创建一个向量来存储多尺度金字塔的图像
std::vector<cv::Mat> images;
// 使用 buildPyramid 创建多尺度金字塔
int scale = 1;
while (src.size().width > 10 && src.size().height > 10) {
cv::Mat image;
cv::pyrDown(src, image); // 使用 pyrDown 进行向下采样
images.push_back(image);
src = image;
scale *= 2;
}
// 显示原始图像和多尺度金字塔的图像
for (int i = images.size() - 1; i >= 0; i--) {
std::cout << "Scale: " << scale << std::endl;
cv::imshow("Image", images[i]);
cv::waitKey(0);
scale /= 2;
}
return 0;
}
上采样:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取图像
cv::Mat src = cv::imread("C:/Users/10623/Pictures/adf4d0d56444414cbeb809f0933b9214.png");
if (src.empty()) {
std::cout << "无法加载图像" << std::endl;
return -1;
}
// 创建金字塔参数
int max_level = 5; // 最大金字塔层数
cv::Mat dst,dst1, dst2, dst3,dst4,dst5;
// 使用 pyrDown 进行向下采样
cv::pyrDown(src, dst1);
cv::pyrDown(dst1, dst2);
cv::pyrDown(dst2, dst3);
// 构建金字塔
cv::pyrUp(dst3, dst, cv::Size(dst3.cols * 2, dst3.rows * 2)); // 向上采样到下一层
cv::pyrUp(dst, dst4, cv::Size(dst.cols * 2, dst.rows * 2));
cv::pyrUp(dst4, dst5, cv::Size(dst4.cols * 2, dst4.rows * 2));
cv::imshow("Pyramid Level 1",dst);
cv::imshow("Pyramid Level 2", dst4);
cv::imshow("Pyramid Level 3", dst5);
cv::waitKey(0);
return 0;
}