opencv小笔记(IndexError: too many indices for array分析和UserWarning:missing from current font分析)

今天在测试下边代码时出现了报错

IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed

这段报错的意思是

索引错误:数组的索引过多:数组是二维的,但有 3 个索引

在将matplotlib部分的代码注释掉,只选择用cv.imshow来展示图片时,没有出现报错。

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 读取图像
img = cv.imread('D://postgraduate//study//opencv//1.png',0)
# 2 显示图像
# 2.1 利用opencv展示图像
cv.imshow('image',img)
# 2.2 在matplotplotlib中展示图像
#设置字体为楷体
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
plt.imshow(img[:,:,::-1])
plt.title('匹配结果'), plt.xticks([]), plt.yticks([])
plt.show()
k = cv.waitKey(0)
# 3 保存图像
cv.imwrite('D://postgraduate//study//opencv//messigray.png',img)

继续测试这段代码,我将cv.imshow('image',img)注释掉, 将以灰度模式读取图像改为以彩色模式读取图像,此时不会再出现上述错误提示

至于是为啥,我也还是没搞明白,这里只能浅浅写一下灰度模式和彩色模式的特点和定义,

灰度图

每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。

彩色图

每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像。

个人鄙陋之见【不保证正确】是:这个应该是输入和输出的维数不一致,因为灰度图是二维来表示图片,而彩色图像或者索引图像的每一个像素是由RGB三个分量来表示。所以导致报错

 在解决这个报错之后,还是出现了一些警告

Glyph 32467 (\N{CJK UNIFIED IDEOGRAPH-7ED3}) missing from current font.

查询之后发现这是一个python经典字体警告 ,导致代码中对于图的中文命名无法显示,所以可以用下面的代码

#设置字体为楷体
matplotlib.rcParams['font.sans-serif'] = ['KaiTi']

就可以显示出汉字的标题,当然直接改成英文的标题也可以,就没有这个问题了。

初学者,难免疏漏,欢迎大佬批评指正!

你可能感兴趣的:(opencv,python,图像处理,学习)