OpenCV:01.OpenCV安装和转灰度图提升饱和度

1. VS 安装、配置Opencv的环境

我们是在 windows的VS中开发 使用功能的方式是:头文件+dll文件的方式来学习opencv的一些常见使用方法。

  1. 下载 opencv.exe 并解压
  2. 生成->配置管理器->平台修改为x64
  3. 配置windows环境变量:path : opencv解压目录\build\x64\vc14\bin
  4. 配置头文件包含目录:调试->xx属性-> 配置属性 ->VC++ 目录-> 包含目录: opencv解压目录\build\include
  5. 配置库目录:调试->xx属性 -> 配置属性 ->VC++ 目录-> 库目录opencv解压目录\build\x64\vc14\lib
  6. 链接器:opencv解压目录\build\x64\vc14\lib 中的 opencv_world440d.lib 复制文件名至
    调试->xx属性 -> 配置属性 ->VC++ 目录-> 链接器 -> 输入 -> 附加依赖项注意:带d的适用于debug模式,不带d的使用于release模式
  7. .dll 系统适配,如果第6步完成后报错xxx.dll未找到,则先把opencv解压目录\build\x64\vc14\bin中的dll文件
    复制到系统盘\windows\System32系统盘\windows\SysWOW54,如果还是不是,则将第6步的文件换成release模式下的文件

c++ 中 uchar

char 是有符号的 unsigned char 是无符号的,char 整数范围为-128到127( 0x800x7F), 而unsigned char 整数范围为0到255( 00xFF )
有时候想把整数数值限在255范围内,也用unsigned char,这个类型在嵌入式用的多,所以 uchar 一般用于图片处理

2. opencv方法介绍:

  • Mat src = cv::imread(“图片路径”) :读取读片,注意 windows 中路径分隔符一定得修改为:/
  • cv::imwrite(“保存路径”,mat); 把 mat 写入文件,注意 windows 中路径分隔符一定得修改为:/
  • cv::imshow(“test pic”,mat); 显示图片
  • int height = cv::mat.rows // 获取 mat 的行高
  • int width = cv::mat.cols // 获取 mat 的列宽
  • int channels= mat.channels() // 颜色通道,一个像素点几个信息 3(BGR) 4(BGRA)
  • saturate_cast(b_w); // 大于 255 就变成 255 ,如果小于 0 就变成 0

3. 彩色图转灰度图及黑白图(手写)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
for (int i = 0; i < src.rows; i++){
// 读取当前行的首地址
uchar* start_pixels = src.ptr<uchar>(i);

for (int j = 0; j < src.cols; j++){
uchar b = start_pixels[0];
uchar g = start_pixels[1];
uchar r = start_pixels[2];

// 彩色转灰度
// 公式计算 f = 0.11R + 0.59G + 0.30B gery 最大255 ,其他处理可能会超过 255
// uchar gery = 0.11f*r + 0.59f*g + 0.30f*b;
uchar gray = 0.11f*r + 0.59f*g + 0.30f*b;

// 彩色转黑白
uchar bw = (b + g + r) / 3 > 125 ? 255 : 0;

// saturate_cast 大于 255就变成255 ,小于0 就变成0
/* start_pixels[0] = saturate_cast<uchar>(bw);
start_pixels[1] = saturate_cast<uchar>(bw);
start_pixels[2] = saturate_cast<uchar>(bw);*/

// 饱和度提升会更亮些
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 += 3;
}
}
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%