cv的Mat结构为图像存储基础数据结构,下面的代码显示了:
- 创建空的Mat对象
- 初始化Mat对象方法,以及多通道Mat初始化方法
- 读取图像为Mat
- 拷贝Mat副本 vs 拷贝Mat数据头(相当于python的别名)
- 图像数据格式转换
# 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; }