灰度化

实战——读取并分析BMP图像的十六进制数据

五迷三道 提交于 2020-03-10 20:25:02
文章目录 【内容概述】 【获取16进制数据】 【文件头】 【位图头】 【调色板】 【24位真彩图的位图数据】 【图像灰度化】 【灰度化后数据格式的变化】 【读32×32灰度图片的位图数据】 【位图数据的存储和像素位置的关系】 【总结】 【内容概述】 图像压缩 在ubuntu系统下读出BMP图像的十六进制数据 分析24位真彩BMP文件的文件头、图像头、调色板、位图数据 截取图像中心32×32区域,并灰度化 分析灰度化后带来的改变 位图数据存储方式与像素位置的关系 接下来我们就开始叭 ~ (* ^ ω ^ *) 【图像压缩】 这是一个 非必要 步骤,如果你的原图很小就不用啦。但是如果原图很大的话,建议压缩一下,不然数据量会hin大的。可以用格式工厂做 (有点大材小用嘞但是我首先就想到这个方法) .具体步骤可参考 这个说明 。我通过压缩把原本4032×3016的图像压缩成128×95的了。看看这个变化叭: 【压缩前】 【压缩后】 【获取16进制数据】 这一步我是在Ubuntu系统下进行的,我把原图命名为【ballon.bmp】 (因为是2019跨年时候在珠海长隆拍的小丑气球) 在图片所在文件夹打开终端,输入 $ xxd -i ballon.bmp ballon.h 并回车,具体操作可以参考 这个说明 。然后可以看到文件夹下新生成了一个.h文件,打开之后就可以看到十六进制的数组啦。

python图像处理之图像灰度化

纵饮孤独 提交于 2020-03-08 11:43:56
灰度化 预备知识 在了解图像处理的基本操作之前,我们需要知道关于图像的一些基本知识。我们这里所说的图像处理实质上是 数字图像处理 ,因为计算机只能对数字信号进行处理,因此存储在计算机中的图像都是实际图像经过离散化处理之后得到的。 图像是以 数组 的形式存储在计算机中间的,对于彩色图像而言,存储形式是三个离散的二维数组,每个数组对应一个颜色通道,具体在python中,图像的数据结构为 numpy数组 。这里需要注意的是,用于表示图像的numpy数组,其数据类型必须是整数类型而不能是浮点数类型,这一点我们在下面还会提到。 灰度化操作 在opencv中间有自带的函数可以直接进行灰度化,在这里我想介绍一下如何不借助opencv的函数自己编写程序来实现灰度化。 我们主要是通过这一公式来实现灰度化 G = 0.114 ∗ B + 0.587 ∗ G + 0.229 ∗ R G=0.114*B+0.587*G+0.229*R G = 0 . 1 1 4 ∗ B + 0 . 5 8 7 ∗ G + 0 . 2 2 9 ∗ R 因此我们的思路也十分明确,将三个颜色通道的值分别读取出来就利用公式就可以实现。当然这里也有几点注意事项: numpy数组的三个颜色通道从小到大一次为G,B,R而不是我们按照常说的RGB。 通过numpy数组可以实现高效的向量化运算,因此要避免使用效率低下的for循环来求值。

图像阈值化(理论)

谁说我不能喝 提交于 2020-02-28 01:59:48
图像分割 是把图像划分成互不相交的若干个同质区域的处理过程。 图像阈值化 是通过选择合适地阈值把灰度图像转换为二值图像的过程,一般把灰度值小于等于阈值的像素作为图像背景,把灰度值大于阈值的像素作为目标处理。 来源: CSDN 作者: elkluh 链接: https://blog.csdn.net/qq_39696563/article/details/104541465

OPENCV对于Mat的理解和操作

牧云@^-^@ 提交于 2020-01-28 22:17:35
1,Mat 是用来存储图片的数据 他会把图片变成矩阵 Mat src; int main(int argc, char** argv){ src = imread("F:\\视觉\\opencv\\pic\\MatTest.png");//读图片 cout << "灰度化后" << endl; cout << src << endl; } 矩阵的格式如下 图片时这样的: 用dos显示是这样的 灰度化之后是这样的 怎么样是不是看上去有点熟悉 没错,灰度化后直接把每个位置的像素的值,组成一个矩阵, 而没有灰度化时是如图一所示。 2,Mat获取某一点坐标的值 来源: https://www.cnblogs.com/kbqLibrary/p/12239063.html

图像预处理

被刻印的时光 ゝ 提交于 2019-12-18 19:07:48
文章目录 为什么需要图像预处理? 图像预处理流程 一,灰度化 (1)分量法 (2)最大值法 (3)平均值法 (4)加权平均法 二,几何变换 (1)opencv来进行图像的空间变换 (2)双线性插值算法实现缩放 三,图像增强 (1)频率域法 (2)空间域法 为什么需要图像预处理? 图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。 图像预处理流程 一般的图像预处理步骤为: 灰度化 ——> 几何变换 ——> 图像增强 一,灰度化 灰度化,在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有分量法,最大值法,平均值法,加权平均法四种方法对彩色图像进行灰度化。 (1)分量法 三个灰度图像的灰度值是彩色图像中三分量中任意一个分量的亮度值,可以是R分量作为灰度值,也可以是G分量和B分量 f1(i,j)=R(i,j)f2(i,j)=G(i,j)f3(i,j)=B(i,j) from PIL import Image import numpy as np def image2array ( image ) : """ :param image: 图片 :return

EasyPR--开发详解(7)字符分割

99封情书 提交于 2019-12-16 17:01:59
  大家好,好久不见了。   一转眼距离上一篇博客已经是 4 个月前的事了。要问博主这段时间去干了什么,我只能说:我去“ 外面看了看”。 图1 我想去看看      在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关的心得与经验。不过由于各种原因,博主又回来了。   目前,博主的工作是在本地的一个高校做科研。而研究的方向主要是计算机视觉。 图2 科研就是不断的探索过程   由于我所做的是计算机视觉方向,跟EasyPR本身非常契合。未来这个这个系列的博客会继续下去,并且以后会有更加专业的内容。   目前我研究的方向是文字定位,这个技术跟车牌定位很像,都是在图中去定位一些语言相关的位置。不同之处在于,车牌定位只需要处理的是在车牌中出现的文字,字体,颜色都比较固定,背景也比相对单一(蓝色和黄色等)。   文字定位则复杂很多,研究界目前要处理的是是各种类型,不同字体,且拥有复杂背景的文字。下图是一张样例: 图3 文字定位图片样例   可以看出,文字定位要处理的问题是类似车牌定位的,不过难度要更大。一些文字定位的技术也应该可以应用于车牌的定位和识别。   未来EasyPR会借鉴文字定位的一些思想和技术,来强化其定位的效果。 一.前言   今天继续我们 EasyPR的 开发详解。   这几个月我收到了不少的邮件问:为什么 EasyPR 开发详解教程中只有车牌定位的部分,

rgb变为灰度图像

╄→гoц情女王★ 提交于 2019-12-16 14:15:00
close all; clc; x = imread('C:\\timg.jpg'); %读取rgb图片信息 I = rgb2gray(x);%将rgb图像转化为灰度图像 set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图像位置的默认设置 [距离左上角的宽,距离左上角的高,窗口宽,窗口高] set(0,'defaultFigureColor',[1 0 1]); %修改图形背景颜色的设置 [1 1 1]是白色 subplot(121),imshow(x); %显示原图像 121指一行两列第一个位置 subplot(122),imshow(I); 该程序可将一张照片灰度化,不可将灰度化照片保存到单独文件夹 来源: https://www.cnblogs.com/wjn1996/p/12028089.html

灰度图片均衡化源码

你离开我真会死。 提交于 2019-12-03 13:37:56
#灰度图片均衡化 img = cv2.imread('yqk.jpg',0) img_info = img.shape height = img_info[0] width = img_info[1] count_g = np.zeros(256,np.float) #每个像素出现的次数 for i in range(0,height): for j in range(0,width): g = img[i,j] index_g = int(g) count_g[index_g] = count_g[index_g] + 1 #每个像素的概率 for i in range(0,255): count_g[i] = count_g[i] / (height * width) sum1 = float(0) #计算累加概率 for i in range(0,255): sum1+=count_g[i] count_g[i] = sum1 print(count_g) #计算一个映射表 map1 = np.zeros(256,np.uint16) for i in range(0,256): map1[i] = np.uint16(count_g[i]*255) #将像素根据映射表映射一个新的图像 for i in range(0,height): for j in range(0

tf读取灰度图片

谁都会走 提交于 2019-12-01 09:48:45
1.tensorflow 读取 图片并灰度化 with tf.Session() as sess: img = tf.read_file(imgfile) #读取图片, img_data = tf.image.decode_jpeg(img, channels=3) #解码 #img_data = sess.run(tf.image.decode_jpeg(img, channels=3)) img_data = sess.run(tf.image.rgb_to_grayscale(img_data)) #灰度化 print('大小:{}'.format(img_data.shape)) print("类型:%s" % type(img_data)) print(img_data) 这里其实有个要注意的,不同于PIL.image 和 cv 的图片读取,这里会带上通道! 来源: https://www.cnblogs.com/blogwangwang/p/11676378.html

Halcon阈值化算子dual_threshold和var_threshold的理解

谁都会走 提交于 2019-12-01 04:22:28
Halcon中阈值二值化的算子众多,通常用得最多的有 threshold、binary_threshold、dyn_threshold 等。 threshold 是最简单的阈值分割算子,理解最为简单; binary_threshold 是自动阈值算子,它可以自动选出暗(dark)的区域,或者自动选出亮(light)的区域,理解起来也没有难度。 动态阈值算子 dyn_threshold 理解起来稍微复杂一点,使用 dyn_threshold 算子的步骤基本是这样的: ① 将原图进行滤波平滑处理。 ② 用原图和平滑后的图逐个像素做比较,它可以根据参数分割出原图比平滑后的图灰度高(或者低)若干个灰度值的区域。 举例如下: 处理程序是这样的: 1 read_image (Image, 'C:/Users/happy xia/Desktop/dynPic.png') 2 mean_image (Image, ImageMean, 9, 9) 3 dyn_threshold (Image, ImageMean, RegionDynThresh, 10, 'dark') 程序分析:本例中,将图片模糊后,点阵字的黑色扩散了,随之就是字的黑色不如原图那么黑了,那么通过给定的限值“10”和“dark”,就可以将原图比模糊后的图 暗10个灰阶以上 的区域(即黑色文字部分)选出来了。