0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV入门之OpenCV的基本操作2

jf_78858299 来源:DL INtoOUT 作者:AN 2023-02-07 14:19 次阅读

3、图像基本认知: RGB Gray HSV等

  • Gray****灰度图

GARY色彩空间(灰度图像)通常指8位灰度图,具有256个灰度级,像素值的范围是[0,255]。不同数值表示不同程度的灰色。像素值越低,灰色越深。0表示纯黑色,255表示纯白色。GARY色彩空间为单通道,所以通常用二维数组表示一幅灰度图像。

二值图像:只有0和255两种像素值的灰度图像。

  • RBG****图像

RGB是我们接触最多的颜色空间,由三个通道表示一幅图像,分别为红色(R),绿色(G)和蓝色(B)。这三种颜色的不同组合可以形成几乎所有的其他颜色。

OpenCV中通道排序为BGR

B(Blue) 蓝色 取值范围:[0,255]

G(Green) 绿色 取值范围:[0,255]

R(Red) 红色 取值范围:[0,255]

自然环境下获取的图像容易受自然光照、遮挡和阴影等情况的影响,即对亮度比较敏感。而RGB颜色空间的三个分量都与亮度密切相关,即只要亮度改变,三个分量都会随之相应地改变,而没有一种更直观的方式来表达。

  • HSV

H(Hue) 色调,色相 取值范围:[0,179]

S(Saturation) 饱和度,色彩纯净度 取值范围:[0,255]

V(Value) 明度 取值范围:[0,255]

HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV颜色空间可以用一个圆锥空间模型来描述。圆锥的顶点处,V=0,H和S无定义,代表黑色。圆锥的顶面中心处V=max,S=0,H无定义,代表白色。

图片

在图像处理中使用较多的是HSV颜色空间,它比RGB更接近人们对彩色的感知经验。非常直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。

  • HLS

H(Hue) 色相

L(Lightness) 亮度

S(Saturation) 饱和度

HLS中的L分量为亮度,亮度为100,表示白色,亮度为0,表示黑色;HSV 中的 V 分量为明度,明度为100,表示光谱色,明度为0,表示黑色。

图片

4、通道分离与合并、色域转换、像素运算

def ChannelOp():
    # 通道分离与合并
    img = np.zeros([500,500,3],np.uint8)
    print(img.size,img.shape)
    # 通道分离,b,g,r
    b,g,r = cv2.split(img)
    # 将b,g通道中的10:100变成白色255,b+g混合后得到青色
    b[10:100,10:100] = 255
    g[10:100,10:100] = 255


    img1 = cv2.merge((b,g,r))
    cv2.imshow('imshow',img1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

示例

图片

def ConvertColor():
    img = cv2.imread("./images/test.jpg")
    # 色彩空间
    color_space = [cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2RGBA,
                  cv2.COLOR_BGR2RGB,cv2.COLOR_BGR2HLS,
                  cv2.COLOR_BGR2HSV,cv2.COLOR_BGR2YUV,
                   cv2.COLOR_BGR2BGRA]
    # 转换
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    # 二值化处理
    # ower_red指的是图像中低于这个lower_red的值,图像值变为0
    # upper_red指的是图像中高于这个upper_red的值,图像值变为0
    # 在lower_red~upper_red之间的值变成255, 其余的为0
    lowerb = np.array([100,100,100])
    upperb = np.array([200, 200, 200])
    mask = cv2.inRange(img,lowerb=lowerb,upperb=upperb)
    cv2.imshow('imshow',mask)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

示例,二值化处理

图片

图像运算

def PixelOp():
    img1 = cv2.imread('./images/10.jpg')
    img2 = cv2.imread('./images/test.jpg')
    # 需要两张图片大小格式完全一样
    img1 = cv2.resize(img1,(720,400),interpolation=cv2.INTER_AREA)
    img2 = cv2.resize(img2, (720, 400), interpolation=cv2.INTER_AREA)
    # 对应位置元素相加,如果大于255则取255
    new_img_add = cv2.add(img1,img2)
    # 对应位置元素相减,如果小于0则取0
    new_img_sub = cv2.subtract(img1,img2)
    # 对应位置元素相乘
    new_img_mu = cv2.multiply(img1,img2)
    # 对应位置元素相除
    new_img_di = cv2.divide(img1,img2)
    # 图像融合,按权重融合
    new_img_w = cv2.addWeighted(img1,0.2,img2,0.6,0)
    # 与或非,对应元素进行异或
    # 非:相当于255-pixel,异或:两者相等为0,不等为1
    new_img_and = cv2.bitwise_and(img1,img2)
    new_img_or = cv2.bitwise_or(img1,img2)
    new_img_not = cv2.bitwise_not(img1)
    new_img_xor = cv2.bitwise_xor(img1,img2)


    cv2.imshow("imshow",new_img_xor)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    185

    文章

    2974

    浏览量

    230386
  • 开源
    +关注

    关注

    3

    文章

    3311

    浏览量

    42473
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41338
  • ruby
    +关注

    关注

    0

    文章

    44

    浏览量

    3451
收藏 人收藏

    评论

    相关推荐

    OpenCV_编程简介(入门必读)

    opencv编程简介,入门必读,适合新手简单了解opencv的相关知识。
    发表于 03-21 13:49 12次下载

    基本阈值操作_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:基本阈值操作
    发表于 06-06 15:39 8次下载

    基本鼠标操作_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:基本鼠标操作
    发表于 06-06 15:39 5次下载

    OpenCV进行基本绘图_《OpenCV3编程入门》书本配套源

    OpenCV3编程入门》书本配套源代码:用OpenCV进行基本绘图
    发表于 05-11 16:46 36次下载

    支持向量机SVM引导_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:支持向量机SVM引导
    发表于 06-06 15:52 2次下载

    OpenCV3编程入门-源码例程全集-OpenCV开发环境的配置

    OpenCV3编程入门-源码例程全集-OpenCV开发环境的配置,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:27 20次下载

    OpenCV3编程入门-源码例程全集-基本阈值操作

    OpenCV3编程入门-源码例程全集-基本阈值操作,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 0次下载

    OpenCV3编程入门-源码例程全集-基本鼠标操作

    OpenCV3编程入门-源码例程全集-基本鼠标操作,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 0次下载

    支持向量机SVM引导_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-支持向量机SVM引导,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 17:02 1次下载

    OpenCV进行基本绘图_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-用OpenCV进行基本绘图,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 17:02 3次下载

    OpenCV入门OpenCV的基本操作1

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:19 757次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>1

    OpenCV入门OpenCV的基本操作实战代码

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:24 772次阅读

    OpenCV入门OpenCV的基本操作3

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:33 613次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>3

    OpenCV入门OpenCV的基本操作4

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:34 606次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b><b class='flag-5'>之</b><b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>4

    OpenCV入门OpenCV的基本操作5

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:35 562次阅读