用open cv 读取图像参数

读取图像的RGB通道

import cv2
img = cv2.imread(‘C:/Users/kyle/Desktop/002.jpg’)
cv2.namedWindow(‘image’, 0)
cv2.imshow(‘image’, img)img = cv2.imread('C:/Users/kyle/Desktop/002.jpg')

括号里还可以添加一个参数:

cv2.IMREAD_UNCHANGED - 以 原图形式 读入
cv2.IMREAD_GRAYSCALE - 以 灰度形式 读入
cv2.IMREAD_COLOR - 以 彩色形式 读入


例如:

img = cv2.imread(‘C:/Users/kyle/Desktop/002.jpg’, cv2.IMREAD_GRAYSCALE);

首先读入图像。
下面我们可以用一个函数来将三个通道分离:

b, g, r = cv2.split(img)


这样就可以将三个通道的图像分别存在b,g,r这三个变量中,然后我们让这三个图片显示出来:

cv2.imshow(“b”, b)
cv2.imshow(“g”, g)
cv2.imshow(“r”, r) 演示一下结果

springboot使用opencv做图片文字识别_缩放

但是有一个问题是这三个通道的图片是不能缩放的,因为我们没有给这三个图片加上一个“namewindow”![在这里插入图片描述](

cv2.namedWindow('image', 0)

因为上面的代码加了这个,所以原图是可以缩放的。

将三个通道分开后,我们自然也可以将他们合回去:

imgbgr = cv2.merge([b, g, r])


其中,imgbgr是新生成的图像的名称,cv2.merge()是合成函数,中括号里的三个值是三个通道的名称。值得注意的是 函数里的三个变量如果只有两个是会报错的,但是可以写两个一样的通道,我们可以试试结果:

imgbgr = cv2.merge([r, g, r])

springboot使用opencv做图片文字识别_c++ 读取图片_02

imgbgr = cv2.merge([r, r, g])

springboot使用opencv做图片文字识别_缩放_03

所以将三个通道以不同方式组合会得到不同的效果。

图像像素的获取

首先我们可以直接用print将图像像素打印出来:(默认顺序是 BGR)

springboot使用opencv做图片文字识别_Desktop_04

其实这样我们看不出各个像素的位置,但我盲猜是一行一行打印像素,有两个理由
1.图中有三重中括号,最里面应该是一个像素点的rgb,第二层是一行像素的集合,最外面是整个图像的像素集合。
2.图中显示的三个像素值是一样的,而我用的图最上面是天空,水平方向的像素基本是一样的。

得到某个坐标的像素

![在这里插入图片描述](

px = img[0, 0]
print(px)

像素值可以自己赋值修改。(这里有点C语言指针的感觉~~)

springboot使用opencv做图片文字识别_c++ 读取图片_05

(这证明我上面的猜测是正确的,,,而且知道了最左上角的坐标是[0,0])也可以只显示一个通道的像素值:

px = img[0, 0, 0]        

0———B,1————G,2————R

图像区域的像素表示

将坐标用区间来表示
例如

part = img[200:300, 0:200]
cv2.imshow('image', part)
img[200:300, 0:200] = [0,0,0]
cv2.imshow('image', img)

springboot使用opencv做图片文字识别_Desktop_06

图像分辨率的获取

同样的这也非常简单,函数是:

print(img.shape)

springboot使用opencv做图片文字识别_c++ 读取图片_07

这说明图像纵向像素是380,横向像素是892,模式是RGB;