设为首页 加入收藏

TOP

图像处理和OpenCV初步(一)
2018-11-24 22:08:40 】 浏览:287
Tags:图像处理 OpenCV 初步

图像从数学和计算机的角度理解就是一个矩阵,矩阵中的每一个元素叫做像素,又由于图像有灰度图像和彩色图像之分,所以图像在矩阵的基础上引入通道(channel),其中色彩用数字来表示的时候,规定数字0表示黑色,数字255表示白色。


OpenCV中的cv::Mat类就是用来表示图像的矩阵而存在的,其中cv::Mat类由头部数据块组成。


cv::Mat有一个很重要的属性,即只有在明确要求时,内存块才 会被复制。实际上,大多数操作仅仅复制了cv::Mat的头部,因此多个对象会指向同一个数据块。这种内存管理模式可以提高应用程序的运行效率,避免内存泄漏,


#include <iostream>
#include <opencv2/core.hpp>


#include <opencv2/highgui.hpp>


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


int main() {


    // // 创建一个 240 行×320 列的新图像
    cv::Mat image1(240,320,CV_8U,100);
    // or:
    // cv::Mat image1(240,320,CV_8U,cv::Scalar(100));


    cv::imshow("Image", image1); // show the image
    cv::waitKey(0); // wait for a key pressed


    // 重新分配一个新图像
    // (only if size or type are different)
    image1.create(200,200,CV_8U);
    image1= 200;


    cv::imshow("Image", image1); // show the image
    cv::waitKey(0); // wait for a key pressed


    // create a red color image
    // channel order is BGR
    cv::Mat image2(240,320,CV_8UC3,cv::Scalar(0,0,255));


    // or:
    // cv::Mat image2(cv::Size(320,240),CV_8UC3);
    // image2= cv::Scalar(0,0,255);


    cv::imshow("Image", image2); // show the image
    cv::waitKey(0); // wait for a key pressed


    // read an image
    cv::Mat image3=  cv::imread("puppy.bmp");


    // all these images point to the same data block
    cv::Mat image4(image3);
    image1= image3;


    // these images are new copies of the source image
    image3.copyTo(image2);
    cv::Mat image5= image3.clone();


    // transform the image for testing
    cv::flip(image3,image3,1);


    // check which images have been affected by the processing
    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); // wait for a key pressed


    // 从函数中获取一个灰度图像
    cv::Mat gray= function();


    cv::imshow("Image", gray); // show the image
    cv::waitKey(0); // wait for a key pressed


    // 作为灰度图像读入
    image1=  cv::imread("puppy.bmp", CV_LOAD_IMAGE_GRAYSCALE);


    // convert the image into a floating point image [0,1]
    image1.convertTo(image2,CV_32F,1/255.0,0.0);


    cv::imshow("Image", image2); // show the image


    // Test cv::Matx
    // a 3x3 matrix of double-precision
    cv::Matx33d matrix(3.0, 2.0, 1.0,
                      2.0, 1.0, 3.0,
                      1.0, 2.0, 3.0);
    // a 3x1 matrix (a vector)
    cv::Matx31d vector(5.0, 1.0, 3.0);
    // multiplication
    cv::Matx31d result = matrix*vect

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言求勾股数代码及解析 下一篇OpenCV颜色转换和皮肤检测

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目