打开一幅彩色图像,从图像数据中读取红、绿、蓝 三个分量,把图像变换到 HSI 空间,修改其中一个分量的值, 然后再变换回 RGB,显示比较原图像和改变后图像的差别。c++
时间: 2024-03-20 11:42:02 浏览: 196
好的,我可以提供 C++ 代码来解决这个问题。首先,我们需要包含必要的头文件:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
```
然后,我们可以读取一幅彩色图像并将其转换为 HSI 空间:
```cpp
// 读取彩色图像
Mat img = imread("image.jpg");
// 转换为 HSI 空间
Mat hsi_img;
cvtColor(img, hsi_img, COLOR_BGR2HSV);
```
现在,我们可以修改其中一个分量的值。在 HSI 空间中,色调(Hue)、饱和度(Saturation)和亮度(Intensity)分别对应着三个分量。我们可以更改色调分量的值:
```cpp
// 修改色调分量
for (int i = 0; i < hsi_img.rows; i++) {
for (int j = 0; j < hsi_img.cols; j++) {
hsi_img.at<Vec3b>(i, j)[0] += 50;
}
}
```
接下来,我们将修改后的图像转换回 RGB 空间:
```cpp
// 转换回 RGB 空间
Mat modified_img;
cvtColor(hsi_img, modified_img, COLOR_HSV2BGR);
```
最后,我们可以比较原图像和修改后的图像:
```cpp
// 显示原图像和修改后的图像
imshow("Original Image", img);
imshow("Modified Image", modified_img);
waitKey(0);
```
这样,我们就完成了这个问题的解答。完整的代码如下:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 读取彩色图像
Mat img = imread("image.jpg");
// 转换为 HSI 空间
Mat hsi_img;
cvtColor(img, hsi_img, COLOR_BGR2HSV);
// 修改色调分量
for (int i = 0; i < hsi_img.rows; i++) {
for (int j = 0; j < hsi_img.cols; j++) {
hsi_img.at<Vec3b>(i, j)[0] += 50;
}
}
// 转换回 RGB 空间
Mat modified_img;
cvtColor(hsi_img, modified_img, COLOR_HSV2BGR);
// 显示原图像和修改后的图像
imshow("Original Image", img);
imshow("Modified Image", modified_img);
waitKey(0);
return 0;
}
```
阅读全文