OpenCV-Python图像颜色空间转换和图像的创建

图像颜色空间转换

在使用OpenCV读去图像文件时,我们得到的图像通道顺序是BGR,每个通道的数值是0~255之间。由于对图像操作的需要,我们会将图像进行颜色空间转换处理,通常是将图像从RGB颜色空间转换到其他颜色空间,比如HSV颜色空间。这个过程需要用到两个opencv函数。

  1. 图像读取函数cv2.imread()
    这个函数有两个参数,第一个是图像文件名,即输入图像的文件所在路径和名称;第二个参数是flag,指定读取图像文件的类型,常见的三种读取图像类型的标志为:
    (1) cv2.IMREAD_COLOR: 默认参数,读入彩色图像,忽略alpha通道,数字1;
    (2) cv2.IMREAD_GRAYSCALE:读入灰度图片,数字0;
    (3) cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道,数字-1

  2. 转换图像的颜色空间函数cv2.cvtColor()
    这个函数同样是两个参数,一个是读入的图像image,一个是指定图像要转换的类型,比如灰度类型,HSV颜色空间,BGR转RGB通道等

具体实例代码。
以下面图片读取为例:


实验图片
# -*-coding:utf-8-*-
"""
File Name: color_space_conversion.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv


def color_space_conversion(image_path: str):
    img = cv.imread(image_path)  # BGR读取图像,0~255,苹果手机上颜色是用sRGB,DCI-P3
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)  # 转为灰度图
    hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)  # 转为HSV颜色空间,H 0~180, S,V 0~255
    bgr = cv.cvtColor(img, cv.COLOR_HSV2BGR)

    cv.imshow('img', img)
    cv.imshow('gray', gray)
    cv.imshow('hsv', hsv)
    cv.imshow('bgr', bgr)
    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == '__main__':
    path = 'images/2.png'
    color_space_conversion(path) 

图像转换展示的效果分别是:


图像转换结果

图像的创建和复制

在opencv-python中创建图像和复制图像都是numpy数组的操作,本文介绍两种创建图像和两种复制图像的方法。两种创建图像的方式是:

  1. 使用np.zeros_like()函数
    该函数是将已读取的图片image作为参数传入函数,就可以创建一个和image形状相同的图像,但是都是0像素值。

  2. 使用np.zeros()函数
    该函数要传入需要创建图像的形状,并且需要指定数组的数据类型,默认值是np.float64

在复制图像时,本文也给出两种实现方法:

  1. 使用np.copy()函数
    将需要复制的图像image传入该函数,会返回一个numpy数组也即是图像,改变该返回值图像的内容,原图像不会改变。

  2. 使用直接复制的方法
    可以采用直接复制的方法将图像image复制给新的变量实现图像的复制,但是这种复制在改变新的图像时,原来的图像也会随着改变

同样使用上面的图像案例,具体代码如下:

# -*-coding:utf-8-*-
"""
File Name: color_space_conversion.py
Program IDE: PyCharm
Create File By Author: Hong
"""
import cv2 as cv
import numpy as np


def numpy_img(image_path: str):
    """
    在opencv-python中所有的图像都是numpy数组,
    可以使用numpy操作图像,如生成图像、修改图像、复制图像
    :param image_path: 传入图像文件路径
    :return: 没有返回值
    """
    # cv2.IMREAD_COLOR: 默认参数,读入彩色图像,忽略alpha通道,数字1;
    # cv2.IMREAD_GRAYSCALE:读入灰度图片,数字0;
    # cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道,数字-1
    img_color = cv.imread(image_path, cv.IMREAD_COLOR)
    img_gray = cv.imread(image_path, cv.IMREAD_GRAYSCALE)
    img_unchanged = cv.imread(image_path, cv.IMREAD_UNCHANGED)
    print(img_color.shape)  # H, W, C  (888,500,3)
    print(img_gray.shape)  # H, W  (888, 500)
    print(img_unchanged.shape)  # H, W, C (888, 500, 4)

    h, w, c = img_color.shape
    roi = img_color[190:400, 150:380, :]  # 截取img_color图像的一部分, 第一维度指定高的范围,第二维度指定宽的范围,第三维度是通道
    # 方法1 创建一个和img_color形状相同的空白图片
    # blank = np.zeros_like(img_color)
    # 方法2 使用h w c和数据类型,创建一个空白图像
    blank = np.zeros((h, w, c), dtype=np.uint8)
    # blank[190:400, 150:380, :] = img_color[190:400, 150:380, :]
    # print(blank)
    # 方法1 图像copy, 改变blank,不会改变img_color
    # blank = np.copy(img_color)
    # 方法2 图像赋值, 共用同一个数据,改变blank,就会改变img_color
    # blank = img_color
    cv.imshow('roi', roi)
    cv.imshow('blank', blank)

    cv.imshow('img_color', img_color)
    # cv.imshow('img_gray', img_gray)
    # cv.imshow('img_unchanged', img_unchanged)
    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == '__main__':
    path = 'images/2.png'
    numpy_img(path)

图像复制的效果展示:


图像创建结果

更多关于OpenCV和深度学习的精彩内容,请关注微信公众号 “AI与计算机视觉”

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容