图像像素

opencv学习指南入门篇(一):图像基本操作

点点圈 提交于 2020-03-08 12:48:13
文章目录 1.在Ubuntu16.04系统上安装OpenCV和imutils 2.查看我们opencv项目结构 3.加载并显示图像 4.访问单个像素 5.提取感兴趣区域(ROI) 6.调整图像大小 7.旋转图像 8.平滑图像 9.在图像上绘图 10.运行脚本 1.在Ubuntu16.04系统上安装OpenCV和imutils (1)opencv安装在我之前的博文上介绍过可以翻阅; (2)安装imutils: pip install imutils 如果是 使用虚拟环境 的话,记得 进入虚拟环境后再安装imutils 简单介绍一下imutils:它是在opencv的基础上对一些方法进行了封装,使得一些图像处理方法更方便易用 2.查看我们opencv项目结构 假设我们将下载到的源码存放在“下载”文件夹下,执行以下命令: cd 下载 unzip opencv-tutorial.zip cd opencv-tutorial tree opencv项目结构.png 第一个脚本opencv_tutorial_01.py将使用电影《侏罗纪公园》中的图像(jp.png)进行基本的图像处理操作。 第二个脚本opencv_tutorial_02.py将介绍如何使用这些图像处理模块来创建OpenCV应用程序,以计算Tetris图像(tetris_blocks.png )中的对象数量。 3.加载并显示图像

音视频开发基础知识(一)像素格式

随声附和 提交于 2020-03-08 01:01:19
像素格式概念 像素格式指的是图像的具体像素用什么所表示。指的是原始数据或者解码之后的数据。 常见像素格式RGB RGB 色彩模式是工业界的一种颜色标准,是通过对 红、绿、蓝 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。而我们显示器能够直接显示的格式就是RGB格式 RGB常见的几种格式区别 RGB16格式 RGB16主要数据格式有 RGB556、RGB555 RGB556 每个像素用16位表示,其中R\G\B分别使用 5、6、5 位 RGB555 每个像素用16位表示,其中R\G\B分别使用 5、5、5 位表示其中多余的一位不使用 //获取高字节的5个bit R = color & 0xF800 ; //获取中间6个bit G = color & 0x07E0 ; //获取低字节5个bit B = color & 0x001F ; //获取高字节的5个bit R = color & 0x7C00 ; //获取中间5个bit G = color & 0x03E0 ; //获取低字节5个bit B = color & 0x001F ; RGB24像素格式 RGB24图像,每个颜色用 8BIT 表示,其中RGB24在内存中排列为 BGR\BGR\BGR

大牛的《深度学习》笔记,Deep Learning速成教程

半城伤御伤魂 提交于 2020-03-07 18:50:54
雷锋网(公众号:雷锋网)按:本文由Zouxy责编,全面介绍了深度学习的发展历史及其在各个领域的应用,并解释了深度学习的基本思想,深度与浅度学习的区别和深度学习与神经网络之间的关系。 深度学习,即Deep Learning,是一种学习算法(Learning algorithm),亦是人工智能领域的一个重要分支。从快速发展到实际应用,短短几年时间里,深度学习颠覆了语音识别、图像分类、文本理解等众多领域的算法设计思路,渐渐形成了一种从训练数据出发,经过一个端到端(end-to-end)的模型,然后直接输出得到最终结果的一种新模式。那么,深度学习有多深?学了究竟有几分?本文将带你领略深度学习高端范儿背后的方法与过程。 一、 概述 二、 背景 三、 人脑视觉机理 四、 关于特征 4.1、特征表示的粒度 4.2、初级(浅层)特征表示 4.3、结构性特征表示 4.4、需要有多少个特征? 五、 Deep Learning的基本思想 六、 浅层学习(Shallow Learning)和深度学习(Deep Learning) 七、 Deep learning与Neural Network 八、 Deep learning训练过程** 8.1、传统神经网络的训练方法 8.2、deep learning训练过程 九、 Deep Learning的常用模型或者方法 9.1、AutoEncoder自动编码器

双线性插值算法进行图像缩放及性能效果优化

二次信任 提交于 2020-03-07 07:06:57
一)转自http://handspeaker.iteye.com/blog/1545126 最近在编程时用到了双线性插值算法,对图像进行缩放。网上有很多这方面的资料,介绍的也算明白。但是,这些文章只介绍了算法,并没有具体说怎么实现以及怎么实现最好,举个例子,你可以按照网上文章的算法自己写一个双线性插值程序,用它对一张图片进行处理,然后再用matlab或者openCV的resize函数对同一张图片进行处理,得到的结果是不一样的,如果源图片较小,效果差距就更大。以下是对于双线性插值的讲解以及上述现象的解释: 1.双线性插值 假设源图像大小为mxn,目标图像为axb。那么两幅图像的边长比分别为:m/a和n/b。注意,通常这个比例不是整数,编程存储的时候要用浮点型。目标图像的第(i,j)个像素点(i行j列)可以通过边长比对应回源图像。其对应坐标为(i*m/a,j*n/b)。 显然,这个对应坐标一般来说不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。双线性插值通过寻找距离这个对应坐标最近的四个像素点,来计算该点的值(灰度值或者RGB值)。如果你的对应坐标是(2.5,4.5),那么最近的四个像素是(2,4)、(2,5)、(3,4),(3,5)。 若图像为灰度图像,那么(i,j)点的灰度值可以通过一下公式计算: f(i,j)=w1*p1+w2*p2+w3*p3+w4*p4; 其中,pi

数字视频基础(一)

懵懂的女人 提交于 2020-03-07 03:37:20
转自 https://blog.csdn.net/shanghaiqianlun/article/details/26477675 1. 基本概念 1.1视频的表示 1.1.1图像的表示 把一个图像用一个个像素来表示,每个像素有确定的位置和确定的亮度值(这里假设是黑白图像)。于是构成了图象。 比如下面的图片: 我们用0表示白,1表示黑,则图像可表示成: 图像有2个分辨率:一个是 空间分辨率 ,也就是图中的水平分辨率N和垂直分辨率M;另一个是 灰度级分辨率 ,也就是用几个bit来表示灰度等级。极端的有二值图,如刚才那个“1”的图。 1.1.2视频的表示 视频也就是在时间轴上的图像序列,如果把图像看成是二维(空间x,y),那么视频就是三维了(空间x,y,加时间t,这个t有时候可能是帧号)。视频的数学表达是f(x, y, t)或f( ,t) 或f(x, y, n)或f( ,n) 每秒图像的帧数,称为视频的帧频。 1.1.3逐行视频和隔行视频 逐行扫描就是成像时一行行扫描形成一帧视频,显示的时候将一帧视频显示在屏幕上。 隔行视频是成像时先扫描偶数行,形成一场叫偶场,然后再扫描奇数行形成奇场图像。这样将一帧图像分成了2场:偶场和奇场,这两场在空间上和时间上都是不一样的。显示的时候,也应该先在显示器的偶行位置显示偶场图像,再在奇行位置显示奇场图像。 逐行视频和隔行视频的比较: 下面讨论一些问题

4.1 图像采样

南笙酒味 提交于 2020-03-06 11:45:14
4.1.1 最近邻插值 最简单图像缩放方法,原理:提取源数据图像中与其邻域最近像素值来作为目标图像相对应点的像素值。 目标各像素点的灰度值-->源图像中与其最邻近像素的灰度值。 OpenCV中提供3个将浮点型数转换成整数的函数:cvRound/cvFloor/cvCeil 1 ////////https://blog.csdn.net/linqianbi/article/details/78593724 2 ////////https://blog.csdn.net/qq_22424571/article/details/80918549 3 #include<opencv2\core\core.hpp> 4 #include<opencv2\highgui\highgui.hpp> 5 #include<opencv2\imgproc\imgproc.hpp> 6 #include<iostream> 7 using namespace cv; 8 //最近邻插值 9 //基于等间隔提取图像的缩放 10 Mat imageReduction1(Mat &srcImage, float kx, float ky)//原始图形以及缩放比例 11 { 12 //获取输出图像分辨率 13 int nRows = cvRound(srcImage.rows * kx);/

Harris角点检测原理详解

 ̄綄美尐妖づ 提交于 2020-03-06 06:00:16
http://blog.csdn.net/lwzkiller/article/details/54633670 关于角点的应用在图像处理上比较广泛,如图像匹配(FPM特征点匹配)、相机标定等。网上也有很多博客对Harris角点检测原理进行描述,但基本上只是描述了算法流程,而其中相关细节并未作出解释,这里我想对有些地方做出补充说明,正所谓知其然知其所以然,如有不对,还望指正。 关于角点的应用在图像处理上比较广泛,如图像匹配(FPM特征点匹配)、相机标定等。网上也有很多博客对Harris角点检测原理进行描述,但基本上只是描述了算法流程,而其中相关细节并未作出解释,这里我想对有些地方做出补充说明,正所谓知其然知其所以然,如有不对,还望指正。 1. 何为角点? 下面有两幅不同视角的图像,通过找出对应的角点进行匹配。 再看下图所示,放大图像的两处角点区域: 我们可以直观的概括下角点所具有的特征: >轮廓之间的交点; >对于同一场景,即使视角发生变化,通常具备稳定性质的特征; >该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化; 2. 角点检测算法基本思想是什么? 算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。 3

关于颜色的基础

北城以北 提交于 2020-03-05 21:42:56
1、表示颜色的几种方式:HSB、RGB、LAB、CMKY。HSB是色相、饱和度、明度三个维度表示,RGB是红绿蓝三种颜色的分量表示,LAB是亮度和a 、b两个颜色通道表示,CMKY是青色、品红色、黄色、黑色的四种分量表示。 2、光的三原色:红绿蓝,主要用于屏幕,颜料三原色:红黄蓝,主要用于印刷。 3、印刷的颜色跟屏幕的上显示的颜色不是一一对应的,在RGB上,黑色可以用RGB混合表示,在油墨印刷中,由于目前制造工艺还不能造出高纯度的油墨,CMY相加的结果实际是一种暗红色,而不是黑色。 4、互补色:在色环中一种颜色对应的互补色是自身180度的颜色,比如红色的互补色是绿色。 5、对比色:指在24色相环上相距120度到180 度之间的两种颜色,比如蓝色的对比色为橙色。 6、图像分辨率单位为用ppi(每英寸多少像素)表示,其他的用dpi表示,包括屏幕、印刷等。 一个像素是一个正方形,一个像素只能有一种颜色,图像分辨率一般为72ppi,印刷中一般为300dpi,一个像素为一个字节。 7、分辨率:分辨率是指有多少像素,比如说显示器分辨率是1280x720就表示这个显示器水平方向有1280个像素,垂直方向上有720个像素。 8、当改变分辨率的时候,比如将图像的分辨率单位从72ppi改成300ppi,图像像素增加,图像大小也变大。增加的像素是通过算法复制周围像素插入。像素插值算法有:邻近复制

opencv-阈值处理

不羁的心 提交于 2020-03-05 10:01:25
从原理:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/threshold/threshold.html 目标: 本节简单介绍: OpenCV中的阈值(threshold)函数: threshold 的运用。 基本理论: 注意: 本节的解释出自Bradski与Kaehler的书籍 Learning OpenCV 。 什么是阈值? 最简单的图像切割的方法。 应用举例:从一副图像中利用阈值切割出我们须要的物体部分(当然这里的物体能够是一部分或者总体)。这种图像切割方法是基于图像中物体与背景之间的灰度差异。并且此切割属于像素级的切割。 为了从一副图像中提取出我们须要的部分,应该用图像中的每个像素点的灰度值与选取的阈值进行比較,并作出对应的推断。 (注意:阈值的选取依赖于详细的问题。即:物体在不同的图像中有可能会有不同的灰度值。 一旦找到了须要切割的物体的像素点,我们能够对这些像素点设定一些特定的值来表示。(比如:能够将该物体的像素点的灰度值设定为:‘0’(黑色),其它的像素点的灰度值为:‘255’(白色);当然像素点的灰度值能够随意,但最好设定的两种颜色对照度较强,方便观察结果)。 阈值化的类型: OpenCV中提供了阈值(threshold)函数: threshold 。 这个函数有5种阈值化类型

Opencv读取图片像素值并保存为txt文件

為{幸葍}努か 提交于 2020-03-05 09:52:56
#include <opencv2/opencv.hpp> #include<vector> #include <fstream> using namespace std; using namespace cv; int main(int argc, char* argv[]) {   const char* imagename = "2.jpg";   //从文件中读入图像   Mat img = imread(imagename);   ofstream outfile("rgb.txt");   //如果读入图像失败   if (img.empty())   {     fprintf(stderr, "Can not load image %s\n", imagename);     return -1;   }   int i, j;   int cPointR, cPointG, cPointB, cPoint;//currentPoint;   for (i = 1; i < img.rows; i++)   {     for (j = 1; j<img.cols; j++)     {       cPointB = img.at<Vec3b>(i, j)[0];       cPointG = img.at<Vec3b>(i, j)[1];