星期二, 10. 一月 2017 01:44下午

这部分主要是对Mat的介绍,以及各种用法,包括读取和拷贝,注意深浅拷贝情况


代码学习

#include<iostream>
#include<string>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
const std::string imageAddr = "/home/ottsion/Pictures/opencvImage/hua.jpg";


//测试函数,创建一个图像
cv::Mat function(){
  cv::Mat ima(500, 500, CV_8U, 50);
  return ima;
}

int main()
{
  cv::namedWindow("Image 1");
  cv::namedWindow("Image 2");
  cv::namedWindow("Image 3");
  cv::namedWindow("Image 4");
  cv::namedWindow("Image 5");
  cv::namedWindow("Image");
  
  //创建一个240*320的新图像
  cv::Mat image1(240, 320, CV_8U, 100);
  cv::imshow("Image", image1);
  cv::waitKey(0);
  
  //重新分配一个新的图像
  image1.create(200, 200, CV_8U);
  image1 = 200;
  
  cv::imshow("Image", image1);
  cv::waitKey(0);
  
  //创建一个红色的图像,通道依次为BGR
  cv::Mat image2(240, 320, CV_8UC3, cv::Scalar(0, 0, 255));
  //或者
  //cv::Mat image2(cv::Size(320, 240), CV_8UC3);
  //image2 =  cv::Scalar(0, 0, 255);
  cv::imshow("Image", image2);
  cv::waitKey(0);
  
  //读入一个图像
  cv::Mat image3 = cv::imread(imageAddr);
  
  //所有图像指向同一个数据块
  cv::Mat image4(image3);
  image1 = image3;
  
  //这些图像都是原图像的副本
  image3.copyTo(image2);
  cv::Mat image5 = image3.clone();
  
  //转换图像用来测试
  cv::flip(image3, image3, 1);
  
  //检查哪些图像在这个过程中受损
  cv::imshow("Image 3", image3);
  cv::imshow("Image 1", image1); 
  cv::imshow("Image 2", image2);
  cv::imshow("Image 4", image4);
  cv::imshow("Image 5", image5);
  cv::waitKey(0);
  
  //从函数中获取一个灰度图像
  cv::Mat gray = function();
  cv::imshow("Image", gray);
  cv::waitKey(0);
  
  //作为灰度图像读入
  image1 = cv::imread(imageAddr, CV_LOAD_IMAGE_GRAYSCALE);
  image1.convertTo(image2, CV_32F, 1/255.0, 0.0);
  cv::imshow("Image" ,image2);
  cv::waitKey(0);
  
  return 0;
}