返回顶部
首页 > 资讯 > 后端开发 > Python >Python+OpenCV实现六种常用图像特效
  • 519
分享到

Python+OpenCV实现六种常用图像特效

2024-04-02 19:04:59 519人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录图像融合灰度处理颜色反转灰度反转彩色反转马赛克效果毛玻璃效果浮雕效果图像融合 按照一定的比例将两张图片融合在一起 addWeighted()方法: 参数1第一张图片矩阵参数2第一

图像融合

按照一定的比例将两张图片融合在一起

addWeighted()方法:

  • 参数1第一张图片矩阵
  • 参数2第一张图片矩阵的权重
  • 参数3第二张图片矩阵
  • 参数4第二张图片矩阵的权重
  • 融合之后的偏移量

进行叠加的两张图片宽高应该相同

叠加之后的像素偏移值如果填的话不要填太大,超过255会导致图像偏白

import cv2
import cv2 as cv

img = cv.imread("img/lena.jpg")
tony = cv.imread("img/tony.jpg", )

# 修改lena图片的宽高  融合图像之前两个图片的宽高要保持一样
height, width = img.shape[0:2]
new_height = int(height * 1.5)
new_width = int(width * 2)
new_img = cv2.resize(img, (new_width, new_height))

# 进行叠加时的插值
dst = cv.addWeighted(new_img, 0.5, tony, 0.5, 0)
cv.imshow("dst", dst)

cv.waiTKEy(0)
cv.destroyAllwindows()

灰度处理

一张彩色图片通常是由BGR三个通道叠加而成

为了便于图像特征识别,我们通常会将一张彩色图片转成灰度图片来进行分析,当我们转成灰色图片之后,图片中边缘,轮廓特征仍然是能够清晰看到的,况且在这种情况下我们仅需要对单一通道进行分析,会简化很多操作

1.前面说的可以读取图片时以灰度的方式读取

import cv2
img = cv2.imread("img/lena.jpg", cv.IMREAD_GRAYSCALE)

2.BGR转灰度图

import cv2

img = cv2.imread("img/lena.jpg", cv.IMREAD_COLOR)
# 将原图的所有颜色转成灰色
dstImg = cv2.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow("dstImg", dstImg)
cv.waitKey(0)

颜色反转

灰度反转

灰度图中每一个像素点都是0~255组成,如果一个像素点为100,反转之后就是255 - 100 = 155

import cv2 as cv

img = cv.imread("img/lena.jpg", cv.IMREAD_COLOR)
# 将原图的所有颜色转成灰色
dstImg = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 获取高度和宽度
height, width = dstImg.shape[0:2]
# 遍历每一个像素点
for row in range(height):
    for col in range(width):
        # 255 - 每一个像素点 = 反转后的颜色
        dstImg[row, col] = 255 - dstImg[row, col]

cv.imshow("dstImg", dstImg)
cv.waitKey(0)

彩色反转

一样的道理,彩色图片有BGR三个颜色通道,每一个颜色都取反

255 - B = B1 255 - G = G1 255 - R = R1

import cv2 as cv

img = cv.imread("img/lena.jpg", cv.IMREAD_COLOR)
# 将原图的所有颜色转成灰色
dstImg = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 获取高度和宽度
height, width = dstImg.shape[0:2]
# 遍历每一个像素点
for row in range(height):
    for col in range(width):
        # 255 - 每一个像素点 = 反转后的颜色
        dstImg[row, col] = 255 - dstImg[row, col]

cv.imshow("dstImg", dstImg)
cv.waitKey(0)

马赛克效果

马赛克指现行广为使用的一种图像(视频)处理手段,此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊看上去有一个个的小格子组成,便形象的称这种画面为马赛克。其目的通常是使之无法辨认。

import cv2

# 读取图片  cv2读取出的图片都是一个二维矩阵
img = cv2.imread('./img/lena.jpg', cv2.IMREAD_COLOR)
# 切片 两个点的坐标可以截取图片
# x1:x2,y1:y2  截取眼睛部分
img1 = img[180:250, 180:310]
# 获取到高度和宽度
height, width = img1.shape[0:2]
# 遍历每一个像素点
for row in range(height):
    for col in range(width):
        # 如果正好为10的倍数的行并且是10的倍数的列
        if row % 10 == 0 and col % 10 == 0:
            # 获取到这个像素点的bgr三原色
            b, g, r = img1[row, col]
            # 遍历这个像素点旁边的100个像素点 都等于中间这个像素点
            for i in range(10):
                for j in range(10):
                    img1[row + i, col + j] = b, g, r

cv2.imshow('img', img)

cv2.imwrite('msk_lena.jpg', img)
cv2.waitKey()

毛玻璃效果

毛玻璃效果和马赛克效果相似,马赛克是:比如4*4的像素点内所有像素点都与第一个像素点颜色一样,毛玻璃效果为遍历每一个像素点,在该像素点附近随机选取一个颜色值替换。

偏移量越大越模糊

import random

import cv2
import numpy as np

img = cv2.imread('./lena.jpg')
height, width = img.shape[0:2]
new_img = np.zeros_like(img, np.uint8)
# 定义偏移量
offset = 6
# 遍历每一个像素点
for row in range(height):
    for col in range(width):
        # 定义不超过1的随机值与offset相乘
        index = int(random.random() * offset)
        # 获取到随机完的行号和列号   如果不超过总高度就使用随机的行  如果超过就使用高度-1
        random_row = row + index if row + index < height else height - 1
        random_col = col + index if col + index < width else width - 1
        # 赋值颜色
        b, g, r = img[random_row, random_col]
        new_img[row, col] = b, g, r

cv2.imshow('img', img)
cv2.imshow('new_img', new_img)

cv2.waitKey()

浮雕效果

浮雕效果公式:new_gray = gray0-gray1+120

加120是为了增加灰度值

import cv2
import numpy as np

img = cv2.imread('./lena.jpg')
# 获取高度宽度
height, width = img.shape[0:2]
# 转为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

new_img = np.zeros_like(gray_img, np.uint8)
# 遍历每一个像素点
for row in range(height):
    # 因为要获取相邻的像素点 防止下标越界提前遍历的时候宽度-1
    for col in range(width - 1):
        # 获取像素点的像素值
        gray0 = gray_img[row, col]
        # 获取相邻像素点的像素值
        gray1 = gray_img[row, col + 1]
        # 使用浮雕效果的公式
        new_gray = int(gray0) - int(gray1) + 120
        # 判断新的灰度值是否越界
        if new_gray > 255:
            new_gray = 255
        elif new_gray < 0:
            new_gray = 0
        # 赋值
        new_img[row, col] = new_gray

cv2.imshow('img', img)
cv2.imshow('new_img', new_img)

cv2.waitKey()

到此这篇关于python+OpenCV实现六种常用图像特效的文章就介绍到这了,更多相关Python OpenCV图像特效内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python+OpenCV实现六种常用图像特效

本文链接: https://lsjlt.com/news/148814.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python+OpenCV实现六种常用图像特效
    目录图像融合灰度处理颜色反转灰度反转彩色反转马赛克效果毛玻璃效果浮雕效果图像融合 按照一定的比例将两张图片融合在一起 addWeighted()方法: 参数1第一张图片矩阵参数2第一...
    99+
    2024-04-02
  • Python+OpenCV六种实时图像处理详细讲解
    目录1、导入库文件2、设计GUI3、调用摄像头4、实时图像处理4.1、阈值二值化4.2、边缘检测4.3、轮廓检测4.4、高斯滤波4.5、色彩转换4.6、调节对比度5、退出系统初学Op...
    99+
    2024-04-02
  • OpenCV实现常见的四种图像几何变换
    目录准备图片1. 缩放 cv2.resize()方法2. 翻转 cv2.flip()方法3. 仿射变换 warpAffine()方法3.1 平移3.2 旋转3.3 倾斜4. 透视准备...
    99+
    2024-04-02
  • opencv实现图像缩放效果
    本文实例为大家分享了opencv实现图像缩放效果的具体代码,供大家参考,具体内容如下 图像缩放: 图像缩放即对图像的大小进行调整,即放大或者缩小 cv2.resize(src,d...
    99+
    2024-04-02
  • opencv实现图像旋转效果
    本文实例为大家分享了opencv实现图像旋转效果的具体代码,供大家参考,具体内容如下 图像旋转: 在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩阵进行变换 参数:...
    99+
    2024-04-02
  • opencv实现图像平移效果
    本文实例为大家分享了opencv实现图像平移效果的具体代码,供大家参考,具体内容如下 图像平移: 按照指定方向和距离,移动到相应位置 格式:cv.warpAffine(img,M,d...
    99+
    2024-04-02
  • opencv+python实现图像矫正
    本文实例为大家分享了opencv+python实现图像矫正的具体代码,供大家参考,具体内容如下 需求:将斜着拍摄的文本图像进行矫正 python代码 import numpy as ...
    99+
    2024-04-02
  • python OpenCV实现图像特征匹配示例详解
    目录目标Brute-Force匹配器的基础使用ORB描述符进行Brute-Force匹配什么是Matcher对象?带有SIFT描述符和比例测试的Brute-Force匹配基于匹配器的...
    99+
    2023-05-17
    python OpenCV图像特征匹配 python OpenCV
  • Python 实现图像特效中的油画效果
    目录一 基本原理二 代码实现三 总体实现代码以及保存 在前面的文章 Python 计算机视觉(十五)—— 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处...
    99+
    2024-04-02
  • OpenCV图像处理之七种常用图像几何变换
    目录0 程序环境与所学函数1 裁剪、放大、缩小2 平移变换3 错切变换4 镜像变换5 旋转变换6 透视变换7 最近邻插值、双线性插值0 程序环境与所学函数 本章程序运行需要导入下面三...
    99+
    2024-04-02
  • Python+OpenCV图像边缘检测四种实现方法
    目录1.Sobel算子2.Schaar算子(更能体现细节)3.Laplacian算子(基于零穿越的,二阶导数的0值点)4.Canny边缘检测(被认为是最优的边缘检测算法)总结 im...
    99+
    2024-04-02
  • Python实现为图像添加下雪特效
    目录导语一、故宫下雪了:界面小程序1)附主程序2)效果展示二、故宫下雪了:手绘素描1)主程序2)效果展示导语 也许是为了和音,在立冬这一天的人间里 北方多个城市,悄然降下冬天的第一...
    99+
    2024-04-02
  • 深入学习Python+Opencv常用四种图像处理操作
    目录改变色彩空间: cv.cvtColor()改变图像大小:cv.resize()二维卷积操作常用模糊opencv图像处理(深度学习中常用的) 改变色彩空间: cv.cvtColor...
    99+
    2024-04-02
  • opencv如何实现图像旋转效果
    小编给大家分享一下opencv如何实现图像旋转效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩阵进行变换参数:实现代码:import ...
    99+
    2023-06-14
  • opencv如何实现图像缩放效果
    这篇文章主要介绍了opencv如何实现图像缩放效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。图像缩放:图像缩放即对图像的大小进行调整,即放大或者缩小cv2.resize(...
    99+
    2023-06-14
  • Python如何实现图像特效中的油画效果
    小编给大家分享一下Python如何实现图像特效中的油画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一 基本原理如下面的两幅图所示,油画用对了地方会使得图像一...
    99+
    2023-06-22
  • Opencv Python实现两幅图像匹配
    本文实例为大家分享了Opencv Python实现两幅图像匹配的具体代码,供大家参考,具体内容如下 原图 import cv2 img1 = cv2.imread('SURF_2.jpg', cv2.IMRE...
    99+
    2022-06-02
    opencv python 图像匹配
  • python opencv图像旋转怎么实现
    要在Python中使用OpenCV实现图像旋转,可以使用OpenCV中的getRotationMatrix2D和warpAffine...
    99+
    2023-10-21
    python
  • C++和OpenCV实现图像字符化效果
    目录实现原理功能函数代码作者:翟天保Steven版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 图像字符化的意思是将图像以字符形式呈现,具有一...
    99+
    2024-04-02
  • Opencv怎么实现图像卡通化效果
    本文小编为大家详细介绍“Opencv怎么实现图像卡通化效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“Opencv怎么实现图像卡通化效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。OpenCV的全称是:Op...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作