图像处理和OpenCV初步

栏目: 编程工具 · 发布时间: 6年前

内容简介:图像从数学和计算机的角度理解就是一个OpenCV中的

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

OpenCV角度来看图像

OpenCV中的 cv::Mat 类就是用来表示图像的矩阵而存在的,其中 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*vector;

std::cout << result;

cv::waitKey(0); // wait for a key pressed

return 0;

}

图像处理和OpenCV初步

灰度图像

一个通道的图像就是灰度图像,就是类似以前的老照片,不是彩色的,也可以理解成黑白的。

  • OpenCV中对灰度图像的处理

// 作为灰度图像读入

image1=  cv::imread("puppy.bmp", CV_LOAD_IMAGE_GRAYSCALE);

// 创建灰度图像

cv::Mat ima(500,500,CV_8U,50);

//0表示灰度图像

cv::Mat image2= cv::imread("boldt.jpg",0);//0表示灰度图

彩色图像

对彩色图像而言,需要用 三原色 数据来重现不同的可见色。

这是因为人类的视觉系统是三原色的,视网膜上有三种类型的视锥细胞,它们将颜色信息传递给大脑。

所以彩色图像的每个像素都要对应三个数值。在摄影和数字成像技术中,常用的主颜色通道是红色、绿色和蓝色,因此每三个 8 位数值组成矩阵的一个元素,特别说明,8 位通道通常是够用的,但有些特殊的应用程序需要用 16 位通道(医学图像就是用16位通道表示)。

  • OpenCV对图像的读入

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

int main()

{

// open the image

cv::Mat image= cv::imread("boldt.jpg",1);

// display result

cv::namedWindow("Image1");

cv::imshow("Image1",image);

// write on disk

cv::imwrite("salted.bmp",image);

cv::waitKey();

// test second version

cv::Mat image2= cv::imread("boldt.jpg",0);//0表示灰度图

cv::namedWindow("Image2");

cv::imshow("Image2",image2);

cv::waitKey();

return 0;

}

图像处理和OpenCV初步

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-11/155437.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具