改变图像的亮度和对比度
Changing brightness and contrast of an image
我正在编写以下代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat change(Mat m);
int main()
{
Mat image = imread("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg");
Mat copy = Mat::zeros(image.size(),image.type());
Mat changedImage = change(copy);
namedWindow("Image");
imshow("Image",changedImage);
waitKey(0);
}
Mat change(Mat m)
{
int cols = m.cols;
int rows = m.rows;
double alpha = 2.2;
int beta = 50;
for(int i=0;i<rows;i++)
{
for(int c=0;c<cols;c++)
{
m.at<Vec3b>(rows,c)[0] = saturate_cast<uchar>(alpha* (m.at<Vec3b>(rows,cols)[0]) + beta);
m.at<Vec3b>(rows,c)[1] = saturate_cast<uchar>(alpha* (m.at<Vec3b>(rows,cols)[1]) + beta);
m.at<Vec3b>(rows,c)[2] = saturate_cast<uchar>(alpha* (m.at<Vec3b>(rows,cols)[2]) + beta);
}
}
return m;
}
可以正常编译,但是当我运行它时,我得到以下错误
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in unknown function, file c:opencvbuildinclu
deopencv2coremat.hpp, line 534
为什么我得到这个?我想我都做对了。
试试这段代码。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
Mat change(Mat m);
int main()
{
Mat image = imread("C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg");
Mat changedImage = change(image); //Modified
namedWindow("Image");
imshow("Image",changedImage);
waitKey(0);
}
Mat change(Mat m)
{
int cols = m.cols;
int rows = m.rows;
double alpha = 2.2;
int beta = 50;
for(int i=0;i<rows;i++)
{
for(int c=0;c<cols;c++)
{
m.at<Vec3b>(i,c)[0] = saturate_cast<uchar>(alpha* (m.at<Vec3b>(i,c))[0]) + beta); //Modified
m.at<Vec3b>(i,c)[1] = saturate_cast<uchar>(alpha* (m.at<Vec3b>(i,c))[1]) + beta); //Modified
m.at<Vec3b>(i,c)[2] = saturate_cast<uchar>(alpha* (m.at<Vec3b>(i,c))[2]) + beta); //Modified
}
}
return m;
}
试试这个…
Mat Change(Mat input,int beta = 50)
{
Mat Output;
Scalar S(beta,beta,beta);
cv::add(input,S,Output);
return Output;
}
相关文章:
- 更改图像部分的亮度和对比度
- 在C/C 中启用高对比度模式
- 如何显示视频捕获过滤器对话框(亮度,曝光等相机设置)
- RGB颜色图像直方图使用OpenCV C 进行对比度拉伸
- OpenGL:是否可能具有16位内部格式,类似于亮度 alpha
- 如何确定Windows 10中的高对比度主题是否存在
- OpenCV改变亮度和对比度
- ASCII 艺术 - 按亮度级别对 ASCII 字符数组进行排序 (C/C++)
- 标题中存在未申报的标识符 - 亮度,但在班级来源中未知
- 从低对比度背景中提取对象
- 尝试打开显示设备句柄以使用 C++ 更改 Windows XP 上的亮度
- 使用IplImage的图像对比度和亮度
- 拍摄图像时亮度是否变化,请更改图像中的对象大小
- 使用 ImageMagick++ 修改图像对比度/亮度
- 使用 C# 或C++如何更改计算机显示器的颜色和亮度设置?
- 处理灰度模板匹配中的亮度
- 如何通过代码在位图上应用蓝色到黄色的渐变,亮度作为因子
- 直方图均衡化的性质?增强对比度,无伪影
- 改变图像的亮度和对比度
- 如何读取视频的亮度和对比度