内容简介:图像从数学和计算机的角度理解就是一个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中对灰度图像的处理
// 作为灰度图像读入
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;
}
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-11/155437.htm
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Opencv图像处理系列(六)—— 图像梯度
- Opencv图像处理系列(九)—— 图像轮廓
- Python 图像处理 OpenCV (15):图像轮廓
- Opencv图像处理系列(三)——图像二值化
- Opencv图像处理系列(八)—— 图像金字塔
- Facebook 开源图像处理库 Spectrum,优化移动端图像生成
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!