基于opencv打开一幅彩色图像,从图像数据中读取红、绿、蓝 三个分量,把图像变换到 HSI 空间,修改其中一个分量的值, 然后再变换回 RGB,显示比较原图像和改变后图像的差别。c++
时间: 2024-03-20 09:43:24 浏览: 69
C++实现图像处理RGB与HSI相互转换代码
好的,下面是代码实现:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("test.jpg", IMREAD_COLOR);
if (img.empty())
{
cout << "Could not read the image: " << endl;
return 1;
}
Mat bgr[3];
split(img, bgr);
// 将 BGR 转换为 HSI
Mat hsi;
cvtColor(img, hsi, COLOR_BGR2HSV);
// 修改 HSI 中的一个分量的值
vector<Mat> channels;
split(hsi, channels);
channels[0] += 50;
merge(channels, hsi);
// 将 HSI 转换回 BGR
Mat bgr2;
cvtColor(hsi, bgr2, COLOR_HSV2BGR);
// 显示原图
imshow("Original Image", img);
// 显示修改后的图
imshow("Modified Image", bgr2);
// 等待用户按下任意按键退出程序
waitKey(0);
return 0;
}
```
解释一下代码:
1. 首先,我们用 `imread` 函数读取一幅彩色图像,如果读取失败则返回错误信息。
2. 然后,我们将 BGR 分量分离出来,用 `cvtColor` 函数将其转换为 HSI 空间。
3. 接着,我们修改其中一个分量的值,比如说将 H 分量加上 50。
4. 我们再用 `cvtColor` 函数将 HSI 转换回 BGR 空间。
5. 最后,我们用 `imshow` 函数分别显示原图和修改后的图像,并等待用户按下任意按键退出程序。
希望这个代码对你有所帮助!
阅读全文