什么是图像 -- opencv基础
opencv基础篇--到底什么是图像
什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image。这两者虽然是形容同一个东西,但却又有着区别。picture代表实而有物的真实图像;而image代表着计算机中存储的图像,也代表想象中的图像。
而我们更多研究的便是image,计算机图像从广义地可分为矢量图和像素图(位图)。矢量图,是由一系列计算机指令描述和记录的一幅图,一幅图可以解为一系列由点、线、面等组成的子图。像素图,则是由很多个点组成的,每个点都是由二进制数据来描述和存储其颜色和亮度等信息。
矢量图,只能表示有规律的线条组成的图形,本身绘制的图像不很真实;但文件存储量很小,可任意缩放。
像素图,各个组成的点都是离散的,绘制的图像可以很复杂且真实;但文件存储量大,放大后会看到明显的锯齿。
在计算机图像中,我们使用opencv去处理和分析的Image中,更多的是像素图。接下来,我将详细地介绍我理解的像素图,根据其存储和显示的方式可以分为多种类型的像素图。
从清晰图角度去理解图像
图像的清晰度由图像的两个基本属性,分辨率与像素深度(也叫位分辨率)。而我们经常遇到的分辨率有两种,即显示器分辨率与图像分辨率。
1.分辨率
通常我们所看到的一张图像,决定它的分辨率的分别是它的图像分辨率和显示器分辨率。
图像的分辨率代表着图像在计算机中存储的量的大小,分辨率越大,所在的内存容量越大。例如,1920x1080则是由200多万个像素单元组成。但是,图像的清晰度还由ccd靶面大小决定,靶面越大,进光量越大,图像效果越好。
显示器的分辨率代表着屏幕对图像像素的解析能力,分辨率越大,解析能力越强,图像越清晰。但是显示器的屏幕越大时,相对解析能力越弱,图像越不清晰。此时,需要显卡GPU进行插值算法优化,提升显示的清晰度。
此处,我还将介绍一下3个地方的分辨率,加深对像素及分辨率的理解。分别是手机的像素、电脑显示屏的分辨率以及电影院的分辨率。
手机的屏幕很小,而通常像素可以达到500万到几千万不等,但拍摄图像的效果还不如一般的数码摄像机的几十万像素。这其中一个十分重要的原因便在于手机在接收像素之后,便会利用算法对像素进行疯狂插值,而后对外公布的像素参数有自然含有大量水分。
电脑显示屏,一般19寸的显示屏最大分辨率为1440*900,大致解析129万像素最为合适,因此用这种显示屏播放1080p的视频时,除非播放器有插值算法优化处理,否则并不能看到1080P视频的效果。
电影的分辨率,在现在数字化时代可以达到2K甚至4K分辨率,当然在国内目前多为2K。4k分辨率一部电影所占内存可达到200-500G,但是电影院播放的银屏十分大,因此4K的数字放映机必须对视频进行插值算法优化,从而投放在银屏上的像素可能达到上亿,才能保证高画质和清晰度,目前这种技术以及片源都难以达到。
2.像素深度
像素深度是指在计算机内存单元中每个像素所用的位数。在计算机图像中,根据像素深度的不同,大致可分为4类,二值化图像,灰度图像,单通道彩色图像以及三通道彩色图像(即24位真彩图)。当然还有其他多通道的彩色图像,这里暂不讨论。
一幅图像在计算机中,被保存为一个头加上一个包含像素数据的内存区。头,即是定义或申明一个结构体或者类;像素数据内存区,即存储每个像素点的地方。
在opencv中,描述一幅图像常用到两个概念,一个是通道,一个是像素深度。但其实质两者是统一的。每一个颜色通道占8位(1个字节),像素深度即通道的数量。一个像素点,通道数越多,那么能描述这一个像素点的方式就越多,这个像素点表现得就越精准,同时,这个像素的深度越大,所占的内存空间也就越大了。
一幅图像,在opencv中可以保存在一个Iplimage、cvmat结构体以及cv::mat类中,其像素在结构体及类中均以行与列的形式存在;在内存区均以二维数组的形式存储。
什么是图像 -- opencv基础的更多相关文章
- OpenCV基础篇之读取显示图片
程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...
- C#_GDI+详细教程(图形图像编程基础)
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
- H265编码等级以及图像的基础知识
1. H265编码等级 H264编码profile & level控制 .H265编码初探 H265 profile H265 Profile & Level & Tier 介 ...
- opencv基础教程 之 图像基础和绘图
1,教程:感谢小强 2,用argparse传参数来显示一张图片 #!/usr/bin/python #linux系统 #coding=utf-8 import cv2 import argparse ...
- OpenCV 基础知识------图像创建、访问、转换
cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ...
- 【opencv基础】图像的几何变换
参考 1. 图像的几何变换-平移和镜像: 2.图像的几何变换-缩放和旋转: 3. opencv图像旋转实现: 完
- 【opencv基础】图像翻转cv::flip详解
前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...
- 图像混合学习。运用加权函数,学习opencv基础操作
{ cout<< } { cout<< } ,,logoImage.c ...
- OpenCV图像的基础叠加
程序及分析 /* * FileName : blend.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Mon 28 Ju ...
随机推荐
- UI控件的位置
1.该位置指的是本控件的中心点位于点 (100, 100)上(不包含尺寸),可以用于中心对齐在使用frame设置位置的情况下 self.view.center = CGPointMake(100, 1 ...
- 简单的 socket 代码
TCP 编程 客户端代码 将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端 #!/usr/python3 import socket def socket_client(): s = ...
- LAMP课程(3)
LAMP课程(3) 一.bash的使用 1.1.输出重定向 >:覆盖输出(写入内容) 具体实例1:将内容写入到文件中 >>:追加输出 具体实例2: 1.2 && ...
- Python3之时间模块time & datetime & calendar
一. 简介 python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能. 时间元组:很多python函数用一个元组装起来的9组数字处理时间. python中时间日期格式化符号: %y 两位 ...
- 【转】idea中maven模块编程灰色
可能是设置中模块的pom.xml文件被忽略了 去掉对勾 转自:https://blog.csdn.net/ethan__xu/article/details/80794060
- Day45--js基本小结
JavaScript基本总结 一:基本背景 01:注:ES6就是指ECMAScript 6.(2015 ECMAScript6 添加类和模块) ECMAScript和JavaScript的关系 199 ...
- C++_异常9-异常的注意事项
一.先讨论异常被引发后,可能导致的问题 意外异常: 如果它是在带异常规范的函数中引发的,则必须与规范列表中的某种异常匹配,否则为意外异常.在默认情况下,这将导致程序异常终止(虽然C++11摒弃了异常规 ...
- LeetCode231.2的幂
231.2的幂 描述 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 示例 1: 输入: 1 输出: true 解释: 2^0 = 1 示例 2: 输入: 16 输出: true 解释 ...
- Flask之flask-migrate 数据库迁移
简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用fl ...
- scrapy模块之分页处理,post请求,cookies处理,请求传参
一.scrapy分页处理 1.分页处理 如上篇博客,初步使用了scrapy框架了,但是只能爬取一页,或者手动的把要爬取的网址手动添加到start_url中,太麻烦接下来介绍该如何去处理分页,手动发起分 ...