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基础的更多相关文章

  1. OpenCV基础篇之读取显示图片

    程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May ...

  2. C#_GDI+详细教程(图形图像编程基础)

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...

  3. H265编码等级以及图像的基础知识

    1. H265编码等级 H264编码profile & level控制 .H265编码初探 H265 profile H265 Profile & Level & Tier 介 ...

  4. opencv基础教程 之 图像基础和绘图

    1,教程:感谢小强 2,用argparse传参数来显示一张图片 #!/usr/bin/python #linux系统 #coding=utf-8 import cv2 import argparse ...

  5. OpenCV 基础知识------图像创建、访问、转换

    cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ...

  6. 【opencv基础】图像的几何变换

    参考 1. 图像的几何变换-平移和镜像: 2.图像的几何变换-缩放和旋转: 3. opencv图像旋转实现: 完

  7. 【opencv基础】图像翻转cv::flip详解

    前言 在opencv中cv::flip函数用于图像翻转和镜像变换. 具体调用形式 void cv::flip( cv::InputArray src, // 输入图像 cv::OutputArray ...

  8. 图像混合学习。运用加权函数,学习opencv基础操作

               {          cout<<     }           {          cout<<     }       ,,logoImage.c ...

  9. OpenCV图像的基础叠加

    程序及分析 /* * FileName : blend.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Mon 28 Ju ...

随机推荐

  1. dubbo服务治理中间件,zookeeper注册中心 安装配置

    对传统项目架构进行拆分: 集群概念: 面向服务分布式架构: 服务层提供被注册的对象需要实现序列化接口Serializable: 配置表现层和服务层: 依赖包: 服务层: <!-- 定义dubbo ...

  2. javascript中构造器(函数)的__proto__与prototype初探

    背景:最近没什么需求,快要闲出屁了,所以重温了一下js的原型,结果大有收获,且偶然看到Snandy大神的<JavaScript中__proto__与prototype的关系> 这篇文章,感 ...

  3. springboot集成巨杉数据库

    springboot倾向于约定优于配置,所以大大简化了搭建项目的流程,包括各种数据源的配置,接下来就和大家分享下最近用到的巨杉数据源连接池的配置 1.现在配置文件中定义巨杉连接池的各种连接信息,至于每 ...

  4. 关于fatal error LINK1123:failure during conversion to COFF:file invalid or corrupt

    今天用Visual Studio 2010编译postgresql工程时突然遇到下面这个编译错误: fatal error LINK1123:failure during conversion to ...

  5. Python3用sys和time模块实现进度条

    import sys import time def view_bar(num, total): rate = float(num) / float(total) rate_num = int(rat ...

  6. php 利用 json 传递数组之中文乱码最新解决办法

    json好用,但是如果数据中有中文就会出乱子了,网上解决办法多半是设置utf-8编码或转换字符编码 以下是我的解决办法,利用php的urlencode.urldecode函数(其实也是一种转换编码吧) ...

  7. Mysql相关操作:

    允许root用户远程访问:https://www.cnblogs.com/davidgu/p/3706663.html; 用户的添加删除管理: https://www.cnblogs.com/hzd2 ...

  8. SQL Server2012如何更改服务器的名称

    Problem: sql server 2012 安装完毕后,连接数据库只能使用 机器名\数据库实例 的方式,想用 localhost 或 . 作为服务器名称不可以 Solution: 参考:http ...

  9. 洛谷 P4859 && BZOJ3622: 已经没有什么好害怕的了

    题目描述 给出 \(n\) 个数 \(a_i\)​ ,以及 \(n\) 个数 \(b_i\)​ ,要求两两配对使得 \(a>b\) 的对数减去 \(a<b\) 的对数等于 \(k\) . ...

  10. 116th LeetCode Weekly Contest Maximum Width Ramp

    Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j].  The ...