opencv彩色平衡
时间: 2023-12-13 13:34:17 浏览: 74
为了实现彩色平衡,我们可以使用OpenCV中的cv::cvtColor()函数将图像从BGR颜色空间转换为YCrCb颜色空间,然后对Y通道进行直方图均衡化,最后将图像转换回BGR颜色空间。下面是一个简单的例子:
```python
import cv2 as cv
def color_balance(img):
# 将图像从BGR颜色空间转换为YCrCb颜色空间
ycrcb = cv.cvtColor(img, cv.COLOR_BGR2YCrCb)
# 对Y通道进行直方图均衡化
channels = cv.split(ycrcb)
cv.equalizeHist(channels[0], channels[0])
cv.merge(channels, ycrcb)
# 将图像从YCrCb颜色空间转换回BGR颜色空间
result = cv.cvtColor(ycrcb, cv.COLOR_YCrCb2BGR)
return result
```
在这个例子中,我们首先将图像从BGR颜色空间转换为YCrCb颜色空间,然后使用cv::split()函数将YCrCb图像分离成三个通道,对Y通道进行直方图均衡化,最后使用cv::merge()函数将三个通道合并成一个图像,并将其转换回BGR颜色空间。
相关问题
opencv 彩色图片白平衡 c++代码
下面是使用 OpenCV 库实现彩色图像白平衡的 C++ 代码示例:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
void whiteBalance(Mat& src, Mat& dst) {
// 计算每个通道的平均值
Scalar avgPixel = mean(src);
float avgB = avgPixel[0];
float avgG = avgPixel[1];
float avgR = avgPixel[2];
// 计算像素增益
float kr = (avgB + avgG + avgR) / (3 * avgR);
float kg = (avgB + avgG + avgR) / (3 * avgG);
float kb = (avgB + avgG + avgR) / (3 * avgB);
// 应用增益调整
Mat channels[3];
split(src, channels);
channels[0] = channels[0] * kb;
channels[1] = channels[1] * kg;
channels[2] = channels[2] * kr;
merge(channels, 3, dst);
}
int main() {
Mat src = imread("input.jpg");
if (src.empty()) {
return -1;
}
Mat dst;
whiteBalance(src, dst);
imshow("input", src);
imshow("output", dst);
waitKey(0);
return 0;
}
```
该代码使用 `whiteBalance` 函数对输入图像进行白平衡处理,其中:
1. 使用 `mean` 函数计算每个通道的平均值。
2. 根据平均值计算像素增益。
3. 将增益应用到每个通道上,得到平衡后的图像。
在 `main` 函数中,读取输入图像并调用 `whiteBalance` 函数进行处理,然后展示原始图像和平衡后的图像。
opencv 彩色图亮度平衡 c++代码
您可以使用以下代码来实现彩色图的亮度平衡:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("input.jpg");
if (image.empty())
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
std::vector<Mat> channels;
split(hsv, channels);
equalizeHist(channels[2], channels[2]);
merge(channels, hsv);
Mat result;
cvtColor(hsv, result, COLOR_HSV2BGR);
imwrite("output.jpg", result);
return 0;
}
```
在这个例子中,我们将输入图像读取到一个Mat对象中。接下来,我们将图像从BGR颜色空间转换为HSV颜色空间。然后,我们将HSV图像分成3个单独的通道,并将亮度通道进行直方图均衡化。最后,我们将3个通道合并回一个图像中,并将其从HSV颜色空间转换回BGR颜色空间。最后,我们将输出图像保存到磁盘上。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![tgz](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)