CSDN博客地址

[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

posted @ 2020-05-08 09:52  Yi_warmth  阅读(652)  评论(0编辑  收藏  举报
CSDN博客地址