图像处理和OpenCV初步

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

内容简介:图像从数学和计算机的角度理解就是一个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


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

查看所有标签

猜你喜欢:

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

啊哈C!思考快你一步

啊哈C!思考快你一步

啊哈磊 / 电子工业出版社 / 2013-9 / 39.00元

这是一本非常有趣的编程启蒙书,全书从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。并配合超萌的编程软件,从开始学习与计算机对话到自己独立制作一个游戏,由浅入深地讲述编程的思维。同时,与计算机展开的逻辑较量一定会让你觉得很有意思。你可以在茶余饭后阅读本书,甚至蹲在马桶上时也可以看得津津有味。编程将会改变我们的思维,教会我们如何思考,让我们的思维插上计算机的翅膀,以......一起来看看 《啊哈C!思考快你一步》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具