C++选定区域直方图均衡化
时间: 2024-01-11 21:20:10 浏览: 40
以下是C++选定区域直方图均衡化的实现代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像
Mat src = imread("lena.jpg", IMREAD_GRAYSCALE);
if (src.empty())
{
cout << "Could not open or find the image!\n" << endl;
return -1;
}
// 选定区域
Rect roi(100, 100, 200, 200);
Mat roiImg = src(roi);
// 直方图均衡化
Mat dst;
equalizeHist(roiImg, dst);
// 将均衡化后的区域复制回原图
dst.copyTo(src(roi));
// 显示结果
imshow("src", src);
waitKey(0);
return 0;
}
```
相关问题
c++ 彩色图像直方图均衡化
彩色图像直方图均衡化是指对彩色图像的三个通道(R、G、B)分别进行直方图均衡化。具体步骤如下:
1. 将彩色图像转换为灰度图像,可以使用以下公式:
gray = 0.299 * R + 0.587 * G + 0.114 * B
其中,R、G、B分别表示彩色图像的红、绿、蓝三个通道,gray表示灰度图像的像素值。
2. 对灰度图像进行直方图均衡化,得到均衡化后的灰度图像。
3. 将均衡化后的灰度图像转换回彩色图像,可以使用以下公式:
R' = gray + (R - gray) * k
G' = gray + (G - gray) * k
B' = gray + (B - gray) * k
其中,R'、G'、B'表示均衡化后的彩色图像的三个通道,k为调节因子,可以根据需要进行调整。将调整后的RGB值限制在0~255的范围内。
下面是一个简单的C++代码实现:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv)
{
// 读入彩色图像
Mat image = imread("test.jpg");
if (image.empty())
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
// 将彩色图像转换为灰度图像
Mat gray_image;
cvtColor(image, gray_image, COLOR_BGR2GRAY);
// 对灰度图像进行直方图均衡化
Mat equalized_image;
equalizeHist(gray_image, equalized_image);
// 将均衡化后的灰度图像转换回彩色图像
Mat color_image;
for (int i = 0; i < image.rows; i++)
{
for (int j = 0; j < image.cols; j++)
{
int gray = equalized_image.at<uchar>(i, j);
int b = image.at<Vec3b>(i, j)[0];
int g = image.at<Vec3b>(i, j)[1];
int r = image.at<Vec3b>(i, j)[2];
float k = 0.7;
int R = saturate_cast<uchar>(gray + (r - gray) * k);
int G = saturate_cast<uchar>(gray + (g - gray) * k);
int B = saturate_cast<uchar>(gray + (b - gray) * k);
color_image.at<Vec3b>(i, j) = Vec3b(B, G, R);
}
}
// 显示原图和处理后的图像
namedWindow("Original Image", WINDOW_NORMAL);
namedWindow("Equalized Image", WINDOW_NORMAL);
imshow("Original Image", image);
imshow("Equalized Image", color_image);
waitKey(0);
return 0;
}
```
opencv+c++彩色图像直方图均衡化
彩色图像直方图均衡化是一种常用的图像增强技术,可以增强图像的对比度和清晰度。下面是使用OpenCV和C++实现彩色图像直方图均衡化的代码示例:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取彩色图像
Mat image = imread("test.jpg", IMREAD_COLOR);
if (image.empty())
{
cout << "读取图像失败!" << endl;
return -1;
}
// 将彩色图像转为YCrCb颜色空间
Mat ycrcb;
cvtColor(image, ycrcb, COLOR_BGR2YCrCb);
// 分离YCrCb三个通道
vector<Mat> channels;
split(ycrcb, channels);
// 对亮度通道进行直方图均衡化
equalizeHist(channels[0], channels[0]);
// 合并三个通道
merge(channels, ycrcb);
// 将YCrCb颜色空间转为BGR颜色空间
Mat result;
cvtColor(ycrcb, result, COLOR_YCrCb2BGR);
// 显示原始图像和直方图均衡化后的图像
namedWindow("Original Image", WINDOW_AUTOSIZE);
imshow("Original Image", image);
namedWindow("Equalized Image", WINDOW_AUTOSIZE);
imshow("Equalized Image", result);
waitKey(0);
return 0;
}
```
以上代码中,首先读取彩色图像,然后将图像转为YCrCb颜色空间,并分离出三个通道。接着对亮度通道进行直方图均衡化,再将三个通道合并,并将YCrCb颜色空间转为BGR颜色空间。最后显示原始图像和直方图均衡化后的图像。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)