『OpenCV3 × C++』基础数据结构Mat

cv的Mat结构为图像存储基础数据结构,下面的代码显示了:

  1. 创建空的Mat对象
  2. 初始化Mat对象方法,以及多通道Mat初始化方法
  3. 读取图像为Mat
  4. 拷贝Mat副本 vs 拷贝Mat数据头(相当于python的别名)
  5. 图像数据格式转换
# include <iostream>
# include <opencv2/core.hpp>
# include <opencv2/highgui.hpp>

cv::Mat function() {
	// 创建图像
	// 长500,宽500,单通道8bit无符号整型,初始值50
	cv::Mat ima(500, 500, CV_8U, 50);
	// 返回图像
	return ima;
}

int main() {
	// _____创建图像_____
	cv::Mat image1(240, 320, CV_8U, 100);  // 初始值100的Mat
	cv::imshow("Image", image1);
	cv::waitKey(0); // 等待按键

	image1.create(200, 200, CV_8U);  // 创建新的Mat,未初始化
	image1 = 200;  // 初始化之
	cv::imshow("Image",image1);
	cv::waitKey(0);

	// RGB通道次序,即下Mat为红色
	cv::Mat image2(240, 320, CV_8SC3, cv::Scalar(0, 0, 255));
	// 等价如下写法
	// cv::Mat image2(cv::Size(240, 320), CV_8SC3);
	// image2 = cv::Scalar(0, 0, 255);
	cv::imshow("Image", image2);
	cv::waitKey(0);

	// _____读取图像_____
	cv::Mat image3 = cv::imread("test.jpg");

	// 下面的图像指向同一数据块
	cv::Mat image4(image3);
	image1 = image3;

	// 下面的图像会拷贝副本
	image3.copyTo(image2);
	cv::Mat image5 = image3.clone();

	// image3翻转后存入image3中
	// >0水平翻转,=0竖直翻转,<0同时翻转
	cv::flip(image3, image3, 1);
	cv::imshow("image3", image3);
	cv::imshow("image1", image1);
	cv::imshow("image2", image2);
	cv::imshow("image4", image4);
	cv::imshow("image5", image5);
	cv::waitKey(0);

	cv::Mat gray = function();
	cv::imshow("Image", gray);
	cv::waitKey(0);

	image1 = cv::imread("test.jpg", CV_LOAD_IMAGE_GRAYSCALE);
	image1.convertTo(image2, CV_32F, 1 / 255.0, 0.0);  // 转换成[0,1]浮点图像
	cv::imshow("Image", image1);
	cv::waitKey(0);

	return 0;
}

猜你喜欢

转载自www.cnblogs.com/hellcat/p/9243478.html