/**********************************************************************************
*本人初学Opencv c++和python版本,所用的Opencv版本是3.2,如有不当之处,
*望各位牛人指出,欢迎交流学习,邮箱844104668@qq.com.
*如有好的计算机视觉资源望分享,哈哈哈哈。。。。。。。。
***********************************************************************************/
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;
/*改变图像的亮度和对比度alpha取值0-1,beta取值0-100*/
void contrast_brightness(Mat src,Mat dst,double alpha,int beta)
{
src.convertTo(dst,-1,alpha,beta);
return ;
}
/*灰度图像自我实现*/
void cvtCOLOR(Mat src,Mat dst)
{float B,G,R;
for(int i=0;i<src.rows;i++)
{
uchar *dt = dst.ptr<uchar>(i);
for(int j=0;j<src.cols;j++)
{
B=src.at<Vec3b>(i,j)[0];
G=src.at<Vec3b>(i,j)[1];
R=src.at<Vec3b>(i,j)[2];
dt[j] = R*0.299 + G*0.587 + B*0.114;
}
}
}
/*图像上下翻转*/
void up_down(Mat src,Mat dst){
for(int i=0;i<src.rows;i++)
{
Vec3b *dt = dst.ptr<Vec3b>(src.rows-i-1);
for(int j=0;j<src.cols;j++)
{
dt[j][0] = src.at<Vec3b>(i,j)[0];
dt[j][1] = src.at<Vec3b>(i,j)[1];
dt[j][2] = src.at<Vec3b>(i,j)[2];
}
}
}
/*图像左右翻转*/
void left_right(Mat src,Mat dst)
{
int w=src.cols;
for(int i=0;i<src.rows;i++)
{
Vec3b *dt = dst.ptr<Vec3b>(i);
for(int j=0;j<src.cols;j++)
{
dt[w-j] = src.at<Vec3b>(i,j);
}
}
}
int main(int argc,char **argv)
{
if(argc!=2)
{
cout<<"input like this:./... .jpg"<<endl;
exit(0);
}
Mat M = imread(argv[1]);
//创建一个和图像大小一致的3通道矩阵,测试灰度图像时要把CV_8UC3改为一通道CV_8UC1
Mat data(M.rows,M.cols,CV_8UC3);
//1、cvtCOLOR(M,data);
//2、up_down(M,data);
//3、left_right(M,data);
contrast_brightness(M,data,0.3,100);
imshow("orignal",M);
imshow("huidu",data);
waitKey(0);
return 0;
}
//原图 //调整过的对比度和亮度的图像
//灰度图像 //图像左右翻转 //图像上下翻转