隔行隔列取样,将长宽分辨率的分别减半,输出一幅缩小的彩色图像,cpp文件
时间: 2024-10-15 09:11:59 浏览: 23
输出与取样绕组隔离的开关稳压电源
在C++中,如果你想要实现隔行隔列取样并减小图片尺寸,可以使用OpenCV库来处理图像。下面是一个简单的例子,假设我们已经包含了`opencv2/opencv.hpp`:
```cpp
#include <opencv2/opencv.hpp>
cv::Mat downsampleImage(const cv::Mat& inputImage) {
// 检查输入是否是彩色图像
int channels = inputImage.channels();
if (channels != 3) {
std::cerr << "Input image must be in BGR color format!" << std::endl;
return cv::Mat();
}
// 创建一个新的Mat,用于存储缩放后的图像
cv::Size newSize(inputImage.cols / 2, inputImage.rows / 2);
cv::Mat outputImage(newSize, CV_8UC3); // 使用BGR格式
// 开始逐行、逐列取样
for (int y = 0; y < inputImage.rows; y += 2) {
for (int x = 0; x < inputImage.cols; x += 2) {
// 提取像素值
cv::Vec3b pixel = inputImage.at<cv::Vec3b>(y, x);
// 将像素值复制到输出图像对应的位置
outputImage.at<cv::Vec3b>(y / 2, x / 2) = pixel;
}
}
return outputImage;
}
int main() {
// 加载原始图像
cv::Mat originalImage = cv::imread("input.jpg");
// 如果读取成功,对图像进行下采样
if (!originalImage.empty()) {
cv::Mat resizedImage = downsampleImage(originalImage);
// ...(这里可以保存或显示处理后的图像)
} else {
std::cerr << "Failed to load the image." << std::endl;
}
return 0;
}
```
在这个例子中,我们首先检查输入图像是否有三个通道(RGB),然后创建一个新的Mat对象来存放缩放后的图像。接着,我们遍历原图的每个偶数行和偶数列,并将它们的像素值复制到新图对应位置。
阅读全文