人工智能方法

目录

1、imread函数

2、calcHist函数

3、numpy中的reval(散开、解开)函数、flatten(变平)函数和reshape()函数


1、imread函数

语法:

import cv2
img = cv2.imread('image.jpg')
print(img)

[[[ 33  26 103]
  [ 34  21 100]
  [ 34  15  98]
  ...
  [ 74  98 118]
  [ 64  89 106]
  [ 57  85 101]]

 [[ 33  27 102]
  [ 33  23 101]
  [ 33  18 100]
  ...
  [ 90 124 145]
  [ 77 109 128]
  [ 67  98 115]]

 [[ 33  27 101]
  [ 33  24 101]
  [ 33  21 101]
  ...
  [103 146 170]
  [ 92 130 153]
  [ 81 118 137]]

 ...

 [[252 198 154]
  [255 212 162]
  [255 221 170]
  ...
  [136 111  91]
  [112  77  57]
  [ 79  38  23]]

 [[243 181 139]
  [247 193 145]
  [251 206 157]
  ...
  [133 111  91]
  [116  84  64]
  [ 88  50  33]]

 [[239 177 139]
  [242 183 140]
  [249 199 153]
  ...
  [127 109  92]
  [113  86  68]
  [ 90  57  41]]]

cv2.imread在不加第二个参数的情况下默认将图片转换成了一个三维数组,

最里面的一维代表的是一个像素的三个通道的灰度值,

第二个维度代表的是第一行所有像素的灰度值,

第三个维度,也就是最外面的一个维度代表的是这一张图片

imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:

  • cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。
  • cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
  • cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1。

2、calcHist函数

计算图像灰度直方图

图像的灰度直方图可以统计出图像中的每一个像素的灰度值在整个图像中出现的次数

 如上图就是一个图像的灰度直方图,横坐标代表的是像素值的范围:[0,255],越接近0表示越黑,越接近255表示图像越亮。纵坐标代表的是每一个灰度值在图像所有像素中出现的次数。柱状图越高,表示该像素值在图像中出现的次数越多。

hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
参数:

  • hist表示直方图,返回的是一个二维数组
  • images表示原始图像
  • channels表示指定通道,通道编号需要用中括号括起,输入图像是灰度图像时,它的值为[0],彩色图像则为[0]、[1]、[2],分别表示B、G、R
  • mask表示掩码图像,统计整副图像的直方图设为None;统计图像的某一部分直方图时,需要掩码图像
  • histSize表示BINS的数量,参数子集的数目
  • ranges表示像素值范围,例如[0, 255]
  • accumulate表示累计叠加标识,默认为false,如果被设置为true,则直方图在开始分配时不会被清零,该参数允许从多个对象中计算单个直方图,或者用于实时更新直方图;多个直方图的累积结果用于对一组图像的直方图计算

 

import cv2
from matplotlib import pyplot as plt
# 计算直方图
img = cv2.imread('low1.png',0)
hist = cv2.calcHist([img],[0],None,[256],[0,255])
# 画出直方图
plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("Bins")
plt.ylabel("number of Pixels")
plt.plot(hist)
plt.xlim([0,256])
plt.show()

 

3、numpy中的reval(散开、解开)函数、flatten(变平)函数和reshape()函数

reval和faltten函数的功能是一样的:将多维数组降为一维。

区别是:

  • numpy.flatten()返回一份拷贝,对拷贝的数据所做的修改不会影响(reflects)原始矩阵,
  • numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),对视图后所做的数据修改会影响(reflects)原始矩阵的数据。
  • reshape()函数当参数只有一个且为-1时,表示将数组降为一维。
#两者功能
In [14]: x=np.array([[1,2],[3,4]])

# flattenh函数和ravel函数在降维时默认是行序优先
In [15]: x.flatten()
Out[15]: array([1, 2, 3, 4])

In [17]: x.ravel()
Out[17]: array([1, 2, 3, 4])

# 传入'F'参数表示列序优先
In [18]: x.flatten('F')
Out[18]: array([1, 3, 2, 4])

In [19]: x.ravel('F')
Out[19]: array([1, 3, 2, 4])

#reshape函数当参数只有一个-1时表示将数组降为一维
In [21]: x.reshape(-1)
Out[21]: array([1, 2, 3, 4])
#x.T表示x的转置
In [22]: x.T.reshape(-1)
Out[22]: array([1, 3, 2, 4])
#flatten函数返回的是拷贝,修改返回的a之后原始的数据x并未改变。
>>> x = np.array([[1, 2], [3, 4]])
>>> a = x.flatten()
>>> a[1] = 100
>>>> a
array([  1, 100,   3,   4])
>>> x
array([[1, 2],
       [3, 4]])            
#ravel返回的是视图,修改返回的数据a之后,x的内容值也会发生相应改变。
>>> x = np.array([[1, 2], [3, 4]])
>>> a = x.ravel()
>>> a
array([1, 2, 3, 4])
>>> a[1] = 100
>>> a
array([  1, 100,   3,   4])
>>> x
array([[  1, 100],
       [  3,   4]])

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DLANDML

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值