您的位置:首页 > 理论基础 > 数据结构算法

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

2018-06-29 14:58 543 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: