int main()
{
Mat img = imread("C:/Users/xiandou/Desktop/study_pdf/demojpg/cv.jpg");//放置一张图片用于测试,这里写图片的绝对路径
// 在窗口中显示
//imshow("source", img);
Mat gray;
printf("%d,%d,%d",img.rows,img.cols,img.channels());
// openCV 转灰度图像
//cvtColor(img,gray,COLOR_BGRA2GRAY);
//imshow("gray", gray);
//imwrite("c:/users/xiandou/desktop/study_pdf/demojpg/gray.jpg", gray);
// 图像处理像素点 转灰度图像
//for (int i = 0; i < img.rows; i++) {
// //获取当前行的首地址
// uchar* start_pixels = img.ptr<uchar>(i);
// for (int j = 0; j < img.cols; j++) {
// uchar b = start_pixels[0];
// uchar g = start_pixels[1];
// uchar r = start_pixels[2];
// // 公式计算 f = 0.11R + 0.59G + 0.30B 最大 255 ,
// uchar gray = 0.11f*r + 0.59f*g + 0.30f*b;
// start_pixels[0] = gray;
// start_pixels[1] = gray;
// start_pixels[2] = gray;
// start_pixels += 3;
// }
//}
for (int i = 0; i < img.rows; i++) {
//获取当前行的首地址
uchar* start_pixels = img.ptr<uchar>(i);
for (int j = 0; j < img.cols; j++) {
uchar b = start_pixels[0];
uchar g = start_pixels[1];
uchar r = start_pixels[2];
// 公式计算 f = 0.11R + 0.59G + 0.30B 最大 255 ,
uchar gray = 0.11f*r + 0.59f*g + 0.30f*b;
// 加深亮度 处理
/*start_pixels[0] = saturate_cast<uchar>(1.2f * b);
start_pixels[1] = saturate_cast<uchar>(1.2f * g);
start_pixels[2] = saturate_cast<uchar>(1.2f * r);
*/
// 底片效果
start_pixels[0] = 255 - b;
start_pixels[1] = 255 - g;
start_pixels[2] = 255 - r;
start_pixels += 3;
}
}
imshow("gray", img);
imwrite("c:/users/xiandou/desktop/study_pdf/demojpg/gray1.jpg", img);
waitKey(0);
}
其中 :
cvtColor(img,gray,COLOR_BGRA2GRAY); 是opencv 图像转灰度图处理函数
// 下边代码 是通过对像素 的处理 图片转为灰度图
// 图像处理像素点 转灰度图像
for (int i = 0; i < img.rows; i++) {
//获取当前行的首地址
uchar* start_pixels = img.ptr<uchar>(i);
for (int j = 0; j < img.cols; j++) {
uchar b = start_pixels[0];
uchar g = start_pixels[1];
uchar r = start_pixels[2];
// 公式计算 f = 0.11R + 0.59G + 0.30B 最大 255 ,
uchar gray = 0.11f*r + 0.59f*g + 0.30f*b;
start_pixels[0] = gray;
start_pixels[1] = gray;
start_pixels[2] = gray;
start_pixels += 3;
}
}