函数举例:
imshow("output_windows", output_image);
imread功能是加载一个图像文件使之成为一个Mat对象
IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变(字面意思)
IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来(grayscale的意思是灰度图)
IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来
注意: OPENCV支持JPG、PNG、TIFF等常见格式的图像文件加载
Mat是opencv中用来存储图像信息的内存对象,Mat对象是C++语言的一种类,具有自动内存管理的优点,我们不再需要手动分配其大小并且当不需要它的时候不再需要手动释放它
Mat对象除了存储图像的像素数据以外,还包括图像的其他属性,具体为宽、高、类型、维度、大小、深度等。具体获取API如下:
Mat src = Imgcodecs.imread(file.getPath());
int width = src.cols();//宽
int height = src.rows();//高
int dims = src.dims();//维度
int channels = src.channels();//通道数
int depth = src.depth();//深度
int type = src.type();//类型信息
Imgcodecs是OpenCV图像输入和输出模块
位图模式是图像中最基本的格式,图像只有黑色和白色像素,是色彩模式中占有空间最小的,同样也叫做黑白图,它包含的信息量最少,无法包含图像中的细节,相当于只有0或者1
一副彩色图如果要转换成黑白模式,则一般不能直接转换,需要首先将图像转换成灰度模式
灰度模式即使用单一色调来表示图像,与位图模式不同,不像位图只有0和1,使用256级的灰度来表示图像,一个像素相当于占用8为一个字节,每个像素值使用0到255的亮度值代表,其中0为黑色,255为白色,相当于从黑->灰->白的过度,通常我们所说的黑白照片就是这种模式,与位图模式相比,能表现出一定的细节,占用空间也比位图模式较大
RGB模式为我们经常见到的,被称为真色彩。RGB模式的图像有3个颜色通道,分布为红(Red),绿(Green)和蓝(Bule),每个都占用8位一个字节来表示颜色信息,这样每个颜色的取值范围为0~255,那么就三种颜色就可以有多种组合,当三种基色的值相等是,表现出为灰色,三种颜色都为255即为白色,三种颜色都为0,即为黑色
RGB模式的图像占用空间要比位图,灰度图都要大,但表现出的细节更加明显
CMYK模式被称为印刷色彩模式,主要是来源于印刷行业,以打印油墨在纸张上的光线吸收特性为基础,与RGB类似,也是使用三种颜色,分别为青色(Cyan),品红色(Magenta),黄色(Yellow),以及黑色(Black)
与RGB不同的是:RGB模式依靠的是自身发光的色彩模式,而CMYK是一种依靠反光的色彩模式。
是根据日常生活中人眼的视觉对色彩的观察得而制定的一套色彩模式,最接近与人类对色彩的辨认的思考方式,所有的颜色都是用色彩三属性来描述
H:(色相):是指从物体反射或透过物体传播的颜色
S:(饱和度):是指颜色的强度或纯度,表示色相中灰色成分所占的比例
B:(亮度):是指颜色对相对明暗程度,通常 100%定义为白色;0%为黑色
除了上述图像模式之外,由于历史原因大部分摄像头输入的图片格式都是YUV格式,开始主要用于电视系统以及模拟视频领域。
在图像的处理过程中,很少使用YUV格式,一般都需要转成RGB格式或者灰度图格式进行转换,而opencv的cvtColor()函数支持这种转换。
namedWindow("test_opencv", CV_WINDOW_AUTOSIZE);
namedwindow()功能是创建一个OpenCV的窗口,它是由OpenCV自动创建与释放的,你无需手动销毁它,他有两个参数:
参数 | 含义 |
---|---|
WINDOW_AUTOSIZE | 窗口大小自动适应图片大小,并且不可手动更改 |
WINDOW_NORMAL | 用户可以改变这个窗口大小 |
imshow("test_opencv", src);
imshow()函数会根据窗口名称将对应的图片显示在指定的窗口上,它同样有两个参数
这里的修改图像就是转变图像的颜色空间
Mat grysrc;
namedWindow("test_opencv_grysrc", CV_WINDOW_AUTOSIZE);
cvtColor(src,grysrc, COLOR_BGR2GRAY);
imshow("test_opencv_grysrc", grysrc);
cvtColor()的功能是把图从一个色彩空间转换到另外一个色彩空间,有三个参数:
参数 | 含义 |
---|---|
COLOR_BGR2HLS | 由BGR空间转换到HLS空间 |
COLOR_BGR2GRAY | 由BGR空间转换到GRAY灰度空间 |
COLOR_BGR2HSV | 由BGR空间转换到hsv灰度空间 |
COLOR_GRAY2BGR | 由GRAY灰度空间转换到BGR空间 |
COLOR_HLS2RGB | 由HLS空间转换到RGB空间 |
等等许多,大家可以自己研究
注意: 这里的RGB和BGR有一点点不同,感兴趣的可以百度
imwrite("A:/opencvproject/grysrc.png", grysrc);
imwrite()函数是将一个图片保存下来,它有两个参数:
#include
#include
using namespace cv;
int main(int argc, char** argv) {
Mat src = imread("A:/opencvproject/pikaqiu.jpg");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("test_opencv_src", CV_WINDOW_AUTOSIZE);
imshow("test_opencv_src", src);
Mat grysrc;
namedWindow("test_opencv_grysrc", CV_WINDOW_AUTOSIZE);
cvtColor(src,grysrc, COLOR_BGR2GRAY);
imshow("test_opencv_grysrc", grysrc);
imwrite("A:/opencvproject/grysrc.png", grysrc);
waitKey(0);
return 0;
}