【发布时间】:2021-11-09 21:05:24
【问题描述】:
我想改变图像的亮度,只访问像素值。 不使用opencv函数(例如convertTo)
输入:图像,数字
num 表示亮度的恒定值
这是我的代码,结果看起来很奇怪。 有什么问题吗?
cv::Mat function(cv::Mat img, int num){
cv::Mat output;
output = cv::Mat::zeros(img.rows, img.cols, img.type());
for (int i = 0; i < img.rows; i++)
{
for (int j = 0; j < img.cols; j++)
{
for (int c = 0; c < img.channels(); c++)
{
output.at<cv::Vec3b>(i, j)[c] = img.at<cv::Vec3b>(i, j)[c] + num;
if (output.at<cv::Vec3b>(i, j)[c] > 255){
output.at<cv::Vec3b>(i, j)[c] = 255;
}
else if (output.at<cv::Vec3b>(i, j)[c] < 0)
{
output.at<cv::Vec3b>(i, j)[c] = 0;
}
}
}
}
cv::imshow("output", output);
cv::waitKey(0);
return img;
}
【问题讨论】:
-
您可能会遇到溢出环绕。在分配给输出之前检查溢出。
if(255- img.at...[c]) > num...
标签: c++ opencv image-processing computer-vision brightness