OpenCV入门之OpenCV的基本操作2

电子说

1.2w人已加入

描述

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()
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分