别想一下子学会,知识日积月累;耐得住寂寞,坚持下去,目标一定会实现
确定一个学习目标:深入学习OpenCV;
确定一个短期学习目标:实现数字识别;
确定一个学习的方法:培养学习兴趣,解决遇到的所有困难,抓住要点;
1、picture含盖了image和photo,也就是指一切图片,范围很广;image指肖像、形象;photo指用相机照出来的照片;
2、OpenCV 模块,有主要功能模块及附加功能模块;
3、_pFirstBlock==pHead 错误的解决方法,确认VS工程属性中,opencv的链接库路径和版本正确;VS2013应该使用vc12目录,VS2012对应vc11目录;debug版和release版要区分;VS工程的运行库参数应该使用"/MDd";系统环境变量Path中,opencv的目录和VS工程设置的路径 应该一致。
5、浮点常数,默认为double类型,后面加f表示float类型浮点常数!
6、float的尾数位是23bit,对应7~8位十进制数,所以有效数字有的编译器是7位,也有的是8位,一个数据的7位的有效数字就是从数据中的第一位不是0的数字开始,到之后的7位数; float:1bit(符号位) 8bits(指数位) 23bits(尾数位);精度是由尾数的位数来决定的,float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字
7、利用.ptr遍历图像像素
#include <opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { /*Mat m(2, 2, CV_8UC3, Scalar(0, 0, 255)); std::cout << m << std::endl;*/ Mat srcImage; srcImage = imread("d://1.png"); int height = srcImage.rows; int width = srcImage.cols * srcImage.channels(); for (int j = 0; j<height; ++j){ uchar* data = srcImage.ptr<uchar>(j);//利用指针.ptr遍历图像像素 for (int i = 0; i<width; ++i){ data[i] /= 2; } } cout << srcImage.channels(); imshow("显示图像", srcImage);waitKey(); system("pause"); return 0; }
8、通道与深度,通道表示每个点能存放多少个数,类似于RGB彩色图中的每个像素点有三个值,即三通道的,图片中的深度表示每个值由多少位来存储,是一个精度问题,一般图片是8bit(位)的,则深度是8