c++opencv求图像某个区域对比度函数
时间: 2023-08-01 08:11:55 浏览: 146
OpenCV中可以使用cv::Mat的convertTo()函数来改变图像的对比度。该函数可以接受两个参数:目标Mat对象的类型和比例因子。比例因子是一个浮点数,用于控制对比度的变化。如果该值大于1,则增加对比度,如果该值小于1,则降低对比度。
下面是一个示例代码,该代码将图像的某个区域的对比度增加了一倍:
```c++
cv::Mat img = cv::imread("image.jpg");
cv::Mat roi = img(cv::Rect(100, 100, 200, 200)); //获取图像的某个区域
double alpha = 2.0; //比例因子
double beta = 0.0; //偏移量
roi.convertTo(roi, -1, alpha, beta); //将区域的对比度增加一倍
cv::imshow("image", img);
cv::waitKey(0);
```
在上面的示例代码中,我们首先读取了一张图像,然后使用cv::Rect函数获取了图像的某个区域。接着,我们定义了一个比例因子alpha为2.0,表示将对比度增加一倍。最后,我们使用convertTo()函数将该区域的对比度增加了一倍,然后显示了结果图像。
相关问题
c++ opencv实现图像亮度对比度伽马值调整
在C++中,可以使用OpenCV库来实现图像的亮度、对比度和伽马值调整。下面是一个简单的示例代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
// 亮度和对比度调整函数
void adjustBrightnessContrast(Mat& image, double alpha, int beta)
{
// 遍历图像的每个像素
for (int y = 0; y < image.rows; y++)
{
for (int x = 0; x < image.cols; x++)
{
for (int c = 0; c < image.channels(); c++)
{
// 对每个通道的像素进行亮度和对比度调整
image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha * image.at<Vec3b>(y, x)[c] + beta);
}
}
}
}
// 伽马值调整函数
void adjustGamma(Mat& image, double gamma)
{
// 建立查找表
unsigned char lut[256];
for (int i = 0; i < 256; i++)
{
lut[i] = saturate_cast<uchar>(pow((double)i / 255.0, gamma) * 255.0);
}
// 应用查找表
image = image.clone();
LUT(image, Mat(1, 256, CV_8UC1, lut), image);
}
int main()
{
// 读取图像
Mat image = imread("input.jpg");
if (image.empty())
{
std::cerr << "Failed to read image." << std::endl;
return -1;
}
// 调整亮度和对比度
double alpha = 1.5; // 亮度调整参数
int beta = 30; // 对比度调整参数
adjustBrightnessContrast(image, alpha, beta);
// 调整伽马值
double gamma = 1.5; // 伽马值调整参数
adjustGamma(image, gamma);
// 显示结果图像
imshow("Adjusted Image", image);
waitKey(0);
return 0;
}
```
在这个示例代码中,我们首先定义了两个函数:`adjustBrightnessContrast`和`adjustGamma`,分别用于亮度和对比度、伽马值的调整。然后在`main`函数中,我们读取了一张图像,然后分别调用这两个函数进行图像处理。最后,将处理后的图像显示出来。
请确保在编译和运行代码之前,已经安装了OpenCV库,并将示例代码中的`input.jpg`替换为你自己的图像路径。
使用c++和opencv对图像进行对比度拉伸
可以使用 OpenCV 中的 equalizeHist() 函数来对图像进行对比度拉伸,代码示例如下:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat img = imread("image.jpg");
// 将图像转换为灰度图像
cvtColor(img, img, COLOR_BGR2GRAY);
// 对图像进行直方图均衡化
equalizeHist(img, img);
// 显示图像
imshow("Equalized Image", img);
waitKey(0);
return 0;
}
```
这段代码会将名为 "image.jpg" 的图像读入,将其转换为灰度图像,然后对其进行直方图均衡化,最后显示处理后的图像。
阅读全文