[Python图像处理]一.图像处理基础知识及OpenCV入门函数
一.图像基础知识
图像是由像素组成的,如同图像中的小方格,每个小方格都会有一个明确的位置坐标和色彩数值。所以图像所展示的样子取决于色彩值和位置,像素是图像中最小的单位,每个点阵图像包含了一定的像素,这些像素决定了图像在屏幕中所展现的大小。常用的图像分为: 二值图像,灰度图像和彩色图像。
彩色图像: 彩色图像是RGB图像,rgb表示红,绿,蓝三种原色,计算机里的所有颜色都是三原色不同比例组成,即三色通道.
灰度图像: 图像除了黑和白,还有灰色,将灰色划分成256个的不同的颜色,图像看着更为清晰,将彩色图像转成灰度图像的最基本预处理操作,通常包括以下几种方式:
(1)浮点算法: gray=r0.5 + g0.5 + b0.5
(2)整数算法: gray=(r30+g50+b10)/100
(3) 移位方法: gray=(r30+r10+b10) >>8
(4) 平均值法: gray=(r+g+b) / 3
(5) 仅取绿色: gray=g
(6) 加权平均值算法: 根据加权平均值算法: 根据光的亮度特征。公示: r=g=b=r0.299 + g*0.587+b0.144
通过上述任意一种方式求得gray后,将原来的RGB中的R,G,B统一用gray代替,形成新的颜色,用它来代替原来的rgb就是灰度图,改变像素矩阵的rgb,来达到彩色图像转变成灰度图。
二值图像: 二值图像中任何一个点非白即黑,白色的像素值是255, 黑色的像素值是0,将灰度图像转成二值图像,通过对像素遍历判断实现,如果像素>55,则设置为255, 否则设置为0。
OpenCV读写图像
1:读入图像
img = cv2.imread(文件名, 参数)
参数1: cv2.IMREAD_UNCHANGED(图像不可变)
参数2: cv2.IMREAD_GRAYSCALE (灰度图像)
参数3: cv2.IMREAD_COLOR(读入彩色图像)
参数4: cv2.COLOR_BGR2RGB(图像通道BGR转成RGB)
2:显示图像
cv2.imshow(窗口名, 图像名)
3:窗口等待
cv.waitKey(delay)
键盘绑定函数,delay表示等待毫秒数,表示等待特定的几毫秒,看键盘是否有输入,返回ASCII值,如果参数为0,表示无限期等待;>0表示等待的毫秒数, <0 表示等待键盘单击
4:删除窗口
cv2.destroyAllWindows() 删除所有窗口
cv2.destroyWindow(窗口名) 删除指定窗口
5:写入图像
cv2.imwrite(文件地址,文件名)
代码如下
import cv2 img = cv2.imread("1.jpg") cv2.imshow("Demo", img) k = cv2.waitKey(0) # 按键盘ESC if k == 27: cv2.destroyWindow("Demo") cv2.imwrite("11.jpg", img)
OpenCV像素处理
1:读取像素
灰度像素直接返回灰度值,彩色图像则返回R,G,B三个分量,OpenCV读取图像是BGR存储,需要转成RGB再进行图像处理.
灰度图像: 返回值 = 图像(位置参数) eg: test = img[88,42]
彩色图像: 返回值 = 图像[位置参数, 0|1|2] 获取BGR三个通道像素
eg: b=img[88,141, 0] g=img[88,141, 1] r=img[88,141, 2]
2:修改像素
修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可.
灰度图像
img[88:142] = 255
彩色图像
1:
img[88, 142, 0] = 255
img[88, 142, 1] = 255
img[88, 142, 2] = 255
2:
img[88, 142] = [255, 255, 255]
代码如下:
import cv2 def test2(): img = cv2.imread("1.jpg", cv2.IMREAD_UNCHANGED) test = img[88, 142] print(test) img[88, 142] = [255, 255, 255] print(test) blue = img[88, 142, 0] green = img[88, 142, 1] red = img[88, 142, 2] print(blue, green, red) cv2.imshow("Demo", img) key = cv2.waitKey(0) if key == 27: cv2.destroyWindow("Demo") test2()
运行结果:
[23 17 40]
[255 255 255]
255 255 255
将行为100到200、列150到250的像素区域设置为白色
import cv2 def test3(): img = cv2.imread("1.jpg", cv2.IMREAD_UNCHANGED) # 行为100到200、列150到250的像素区域设置为白色 img[100:200, 150:250] = [255, 255, 255] cv2.imshow("Demo", img) key = cv2.waitKey(0) if key == 27: cv2.destroyWindow("Demo") test3()
效果如下:
文章转自: https://blog.csdn.net/eastmount/category_7912787.html