OpenCV学习笔记(一)图像的基本操作

OpenCV概述

  OpenCV 作为强大的计算机视觉开源库,很大程度上参考了MatLab的实现细节和语法风格,甚至很多语法风格完全一样,如imread,imshow,imwriter等。在计算机内存中,数字图像以矩阵的形式存储和运算,比如,在MatLab中,图像读取之后对应一个矩阵,在OpenCV中,同样也是如此。
  OpenCV开源库引入了面向对象编程思想,大量源代码用C++或Python重写。

图像基本操作

  1. 加载图像:cv::imread(name,type)

  此功能是加载图像文件成为一个Mat对象,第一个参数表示图像文件名称,第二个参数表示图像类型,支持常见的3个参数值:
IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变;
IMREAD_GRAYSCALE(0)表示将原图作为灰度图像加载进来;
IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来。

  1. 显示图像:cv::namedWindos()cv::isnhow()

  namedWindos功能是创建一个OpenCV窗口,由OpenCV自动创建与释放,无需销毁;常见用法是namedWindos("Window Title",WINDOW_AUTOSIZE"),会根据图像大小、显示窗口大小自动显示,无法更改。WINDOW_NORMAL跟QT集成的时候会使用,此方法允许修改窗口大小。
  imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二个参数是Mat对象。

  1. 修改图像:cv::cvtColor()

  cvtColor的功能是把图像从一个彩色空间转换到另一个色彩空间,有3个参数:
第一个参数表示源图像;
第二个参数表示色彩空间转换后图像;
第三个图像表示源和目标色彩空间如:COLOR_BGR2HLS、COLOR_BGR2GRAY等。
  cvtColor(image,gray_image,COLOR_BGR2GRAY);

  1. 保存图像:imwrite(path,name)

测试代码如下:

#include
#include

using namespace cv;

int main(int argc, char** argv) {
     

	Mat image = imread("C:/Users/覃忠原/Desktop/OpenCV图片/钢铁侠壁纸.jpg");
	if (image.empty()) {
     
		printf("could not load image...\n");
		return -1;
	}

	namedWindow("test_opencv_setup", WINDOW_AUTOSIZE);
	imshow("test_opencv_srtup", image);

	namedWindow("output window", WINDOW_AUTOSIZE);
	Mat output_image;
	cvtColor(image, output_image, COLOR_BGR2HLS);
	imshow("output window", output_image);

	imwrite("C:/Users/覃忠原/Desktop/OpenCV图片/test.jpg", output_image);

	waitKey(0);
	return 0;
}

数据类型和通道

  1. 数据类型
数据类型 说明 取值范围
CV_8U 8位无符号整数 0—255
CV_8S 8位有符号整数 -128—127
CV_16U 16位无符号整数 0—65535
CV_16S 16位有符号整数 -32768—32767
CV_32S 32位有符号整数 -2147483648—2147483647
CV_32F 32位浮点整数 -FLT_MAX—FLT_MAX,INF,NAN
CV_64F 64位浮点整数 -DBL_MAX—DBL_MAX,INF,NAN
  1. 通道

  仅有数据类型是不够的,还需要定义图像数据的通道(Channel)数,例如灰度图像数据是单通道数据,彩色图像数据是3通道或者4通道数据。
  C1、C2、C3、C4分别表示单通道、双通道、3通道和4通道。每一种数据类型都存在多个通道的情况,所以将数据类型与通道数表示结合便得到了OpenCV中对图像数据类型的完整定义,例如CV_8UC1表示的就是8位单通道数据,用于表示8位灰度图,而CV_8UC3表示的是8位3通道数据,用于表示8位彩色图。

cv::Mat a(640,480,CV_8UC3) //创建一个640*480的3通道矩阵用于存放彩色图像
cv::Mat a(3,3,CV_8UC1)     //创建一个3*3的8位无符号整数的单通道矩阵
cv::Mat a(3,3,CV_8U)       //创建单通道矩阵C1标识可以省略

你可能感兴趣的:(opencv,c++,计算机视觉,图像识别)