引言:学习opencv1月有余,写些东西或者说感想来回顾自己的心路历程,给更多初学者一个经验的参考。
心态
万事开头难,学习一个新知识,新领域尤其如此,我个人学习比较喜欢激流勇进,说白了就是吃现成的,文明点讲就是“If I have seen further,it is by standing on the shoulders of giants”,韩愈也说“君子性非异也,善假于物也”。
废话不多说。我在猛啃书本3天之后,开始了一点点摸索。
初尝
首先一个大前提,要搞懂在计算机中图像是什么!没错,就是一堆0 1数字,简单如斯。但进一步这堆数字是有一定规律和内涵的。
图片是一个二维画面,带有像素这个属性,像素就是组成图片的最小单位,30万像素就是指 640×480,也就是640列,480行像素构成。
每一个像素就跟01有了关系,像素的深度就是多少位01来表示像素所反应的颜色
8 bpp[2^8=256;(256色)];
16 bpp[2^16=65536; (65,536色,称为高彩色)];
24 bpp[2^24=16777216; (16,777,216色,称为真彩色)];
32bpp同24,但还多出8位来表示透明度
48 bpp[2^48=281474976710656;281,474,976,710,656色,用于很多专业的扫描仪]。
从简单的3原色+透明度分析,BGRA 一个像素中就4个维度即4个通道,像素每个通道都用8个位来表示。最小为0最大255。
到此我们就知道对图像的操作,就是对每个像素的处理,就是对0-255的数字和通道的处理。
同时对opencv的学习也是在学习opencv每个API的使用,及表现。
实例
那么让我们首先分析一个opencv比较基础的API cvtcolor(颜色空间转换)
public:
static void CvtColor(
InputArray^ src,
OutputArray^ dst,
ColorConversionCodes code,
int dstCn = 0
)
Parameters
src
Type: OpenCvSharp::InputArray
dst
Type: OpenCvSharp::OutputArray
code
Type: OpenCvSharp::ColorConversionCodes
dstCn (Optional)
Type: System::Int32
最常用的就是转化为灰度图 RGBA2GRAY
转换空间之前的图片像素值
转换为gray灰度空间之后的图片像素值
RGB转换成灰度图像的一个常用公式Gray = R0.299 + G0.587 + B*0.114 试一下喽,
所以把问题简单化之后,再进行阈值等的变换就很方便了。
再续
来源:CSDN
作者:Henrymake
链接:https://blog.csdn.net/qq_20376753/article/details/104579461