本文共 3292 字,大约阅读时间需要 10 分钟。
本人也是初学者,在学习了贾志刚老师的opencv视频课程后自己进行了一些笔记,其中函数及参数解释部分来源于学习内容,这里将其进行了部分记录,并在代码中加入了自己理解,可能有错误,欢迎指正。
1.原始的图像(1.jpg),此图像本身是3通道的,看着像单通道二值图像,但其为3通道图像
1.1 经过imagewatch插件可以看到其通道状况(原始的图像) 2.经过cvtColor(src, output_image, CV_BGR2GRAY); 将原始BGR图像灰度化后,由三通道变为单通道后的灰度图像。 3.经过threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);处理,二值化后的图像,单通道内的值只有0或255,此为二值图像。 1.原始的图像(2.bmp),此本身为单通道二值图像,当以Imread原图方式IMREAD_UNCHANGED读取时,后面就不需要进行色彩空间的转换为灰度图像了,否则的话使用COLOR_BGR2GRAY方式进行色彩空间转换可能会报错 2.使用imagewatch可查看其内部数值,单通道且只有255和0的值。#include#include using namespace std;//后面的cout需要用到using namespace cv;int main(){ //Mat src = imread("2.bmp"); //此处默认是以三通道RGB的方式读取图像(无论原始图像是单通道二值(2.bmp)的都会变为RGB图像) //Mat src = imread("3.PNG",IMREAD_GRAYSCALE);//IMREAD_GRAYSCALE (0)以灰度图的方式读取(可以将3通道的转换成单通道的),使用imagewatch可以看到 //Mat src = imread("FigFindCountours1.bmp", IMREAD_COLOR);//IMREAD_COLOR(>0) 表示把原图作为RGB图像加载进来(可以将单通道的二值图像变成3通道的) Mat src = imread("1.jpg", IMREAD_UNCHANGED);//IMREAD_UNCHANGED (<0) 以原始图像的方式读取,此张图片3.PNG本身为三通道的,使用imagewatch可以更直观的看到 //cout << src.type() << endl; //通过此值可以查看所读取的图像属于什么类型,如16表示8位无符号整型3通道的数据类型,https://blog.csdn.net/jeffdeen/article/details/52401526 if (src.empty()){ printf("could not load image...\n"); return -1; } namedWindow("opencv setup demo",CV_WINDOW_AUTOSIZE);//由opencv自动创建窗口并释放的,在早期版本还需要销毁 //namedWindos功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,你无需取销毁它。 // 常见用法namedWindow("Window Title", WINDOW_AUTOSIZE) // WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小 // WINDOW_NORMAL, 跟QT集成的时候会使用,允许修改窗口大小。 // imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二参数是Mat对象 imshow("opencv setup demo", src);//将图像显示到指定窗口 Mat gray; //进行灰度化 cvtColor(src, gray, CV_BGR2GRAY);//将读取得到的BGR图像转换为灰度图像,此处与前方读取图像的IMREAD_GRAYSCALE功能相同 //此处应注意,当参数为CV_BGR2GRAY(BGR转成GRAY)等时,前方的输入图像必须为3通道的BGR图像,否则程序会崩溃 //cvtColor(src, output_image,CV_BGR2HLS);//将RGB转换成HLS图像,H代表色相,L代表亮度,S代表饱和度转换到此空间我们就有很多东西可以控制了,还可以将其转换为rgb空间 namedWindow("gray windows", CV_WINDOW_AUTOSIZE); imshow("gray windows", gray); imwrite("gray.png", gray); Mat binary; //进行二值化 threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU); namedWindow("binary windows", CV_WINDOW_AUTOSIZE); imshow("binary windows", binary); imwrite("binary.png", binary);//imwrite保存图像文件到指定目录路径 /*只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR的图像才可以通过这种方式保存 保存PNG格式的时候可以保存透明通道的图片 可以指定压缩参数*/ waitKey(0); return 0;}