python opencv图像算数运算及修改颜色空间的方法

这篇文章主要介绍了python opencv图像算数运算及修改颜色空间的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python opencv图像算数运算及修改颜色空间的方法文章都会有所收获,下面我们一起来看看吧。

    1.图像加法

    图像加法有两种方式,一种是通过 Numpy 直接对两个图像进行相加,另一种是通过 OpenCV 的 add() 函数进行相加。

    不管使用哪种方法,相加的两个图像必须具有相同的深度和类型,简单理解就是图像的大小和类型必须一致。

    1.1Numpy加法

    Numpy 的运算方法是: img = img1 + img2 ,然后再对最终的运算结果取模。

    • 当最终的像素值 <= 255 时,则运算结果直接为 img1 + img2 。

    • 当最终的像素值 > 255 时,则运算的结果需对 255进行取模运算。

    1.2OpenCV加法

    OpenCV 的运算方式是直接调用 add() 函数进行的,这时的运算方式是饱和运算。

    • 当最终的像素值 <= 255 时,则运算结果直接为 img1 + img2 。

    • 当最终的像素值 > 255时,这时则是饱和运算,结果固定为 255 。

    两种加法方式对应的示例如下:

    import cv2 as cv
    # 读取图像
    img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
    test = img
    # Numpy 加法
    result1 = img + test
    # OpenCV 加法
    result2 = cv.add(img, test)
    # 显示图像
    cv.imshow("img", img)
    cv.imshow("result1", result1)
    cv.imshow("result2", result2)
    
    # 等待显示
    cv.waitKey()
    cv.destroyAllWindows()

    python opencv图像算数运算及修改颜色空间的方法  python 第1张

    可以看到,使用 Numpy 取模加法的图片整体更偏蓝色,而使用 OpenCV 饱和运算的加法,整体颜色更偏白色。

    2.图像融合

    图像融合其实也是一种图像加法,但是它和图像加法不同的是对图像赋予不同的权重,可以使图像具有融合或者透明的感觉。

    • 图像加法: img = img1 + img2

    • 图像融合: img = img1 * alpha + img2 * beta + gamma

    图像融合用到的函数为 addWeighted() 具体如下:

    dst = cv.addWeighter(img1, alpha, img2, beta, gamma)
    dst = img1 * alpha + img2 * beta + gamma

    这里的 alpha 和 beta 都是系数,而 gamma 则是一个亮度调节量,不可省略。

    下面这个示例中,有一张地铁的图片,用这张图片和小姐姐做一个图像融合的案例:

    img1 = cv.imread(file, cv.IMREAD_UNCHANGED)
    img1=cv.resize(img1,(1000,1000))
    img2 = cv.imread(file1, cv.IMREAD_UNCHANGED)
    img2=cv.resize(img2,(1000,1000))
    # 图像融合
    img = cv.addWeighted(img1, 0.4, img2, 0.6, 10)
    # 显示图像
    cv.imshow("img1", img1)
    cv.imshow("img2", img2)
    cv.imshow("img", img)
    
    # 等待显示
    cv.waitKey()
    cv.destroyAllWindows()

    注意:这里如果二个图像像素不同要更改为同一像素下cv.resize(img,(width,hegiht))

    python opencv图像算数运算及修改颜色空间的方法  python 第2张

    python opencv图像算数运算及修改颜色空间的方法  python 第3张

    3.改变颜色空间

    OpenCV 中有超过150种颜色空间转换方法。我们先介绍两种最常用的: BGR <-> 灰度 和 BGR <-> HSV 。

    对于改变颜色空间,我们使用 cvtColor(input_image, flag) 函数,其中的 flag 为转换的类型。

    一些常见的 flag 值:

    # BGR 转 灰度
    cv.COLOR_BGR2GRAY
    # BGR 转 HSV
    cv.COLOR_BGR2HSV
    # BGR 转 RGB
    cv.COLOR_BGR2RGB
    # 灰度 转 BGR
    cv.COLOR_GRAY2BGR

    我们使用 cvtColor() 这个函数将小姐姐转化成灰度图像,示例如下:

    import cv2 as cv
    # 读取图像
    img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
    # 图像类型转换
    result = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
    
    # 图像展示
    cv.imshow("img", img)
    cv.imshow("result", result)
    
    # 等待显示
    cv.waitKey()
    cv.destroyAllWindows()

    python opencv图像算数运算及修改颜色空间的方法  python 第4张

    关于“python opencv图像算数运算及修改颜色空间的方法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python opencv图像算数运算及修改颜色空间的方法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注蜗牛博客行业资讯频道。

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论

    有免费节点资源,我们会通知你!加入纸飞机订阅群

    ×
    天气预报查看日历分享网页手机扫码留言评论Telegram