python学习之OpenCV-Python模块的部分应用示例(生成素描图和动漫图)

news/2024/11/22 22:32:14/

文章目录

  • 前言
  • 一、图片转灰度
  • 二、对图片进行二值化处理
  • 三、对图片去除噪点
  • 四、调整图片透明度
  • 五、生成素描滤镜效果图(方法结合应用)
  • 六、生成动漫卡通滤镜效果图(方法结合应用)
  • 总结


前言

OpenCV 是一个图像和视频处理库,具有 C++、C、Python 和 Java 中的绑定。OpenCV用于各种图像和视频分析,如面部识别和检测,车牌读取,照片编辑,高级机器人视觉,光学字符识别等等。

OpenCV-Python 是一个 Python 绑定库,旨在解决计算机视觉问题。

Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和代码可读性。它使程序员能够用更少的代码表达思想,而不会降低可读性。

与 C/C++ 这类语言相比,Python 的速度更慢。好在,可以使用 C/C++ 轻松的拓展 Python ,我们可以在 C/C++ 中编写计算密集型代码,并用 Python 来封装。这给我们带来了两个好处:首先,代码像原始的 C/C++ 代码一样快(因为后台实际上就是 C/C++ 代码在工作),其次,在 Python 中编写代码比在 C/C++ 中更容易。OpenCV-Python 就是 OpenCV C++ 的 Python 封装。

OpenCV-Python 使用了 Numpy,这是一个有着 MATLAB 风格语法,高度优化的用于数值计算的库。所有 OpenCV 数组结构都与 Numpy 数组进行转换。这也使得与使用 Numpy 的其他库(如 SciPy 和 Matplotlib)集成更容易。


在这里插入图片描述

一、图片转灰度

什么叫图片的灰度化呢?其实很简单,就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B(就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等,“=”的意思不是程序语言中的赋值,是数学中的相等),此时的这个值叫做灰度值。

代码如下(示例):

import cv2  # 导入OpenCV-Python模块
import os   # 导入文件与系统模块
import numpy as np  # 导入数值计算库'''
def filter(filein,picture_name):imgI_filename = os.path.join(filein,picture_name) # 源文件路径imgO_filename = os.path.join(r'out', picture_name)  # 目标文件路径img_rgb = cv2.imread(imgI_filename)  # 读取源图片img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY) # 转换为灰度# 调整亮度和对比度res = np.uint8(np.clip((1.2 * img_gray + 0), 0, 255))cv2.imwrite(imgO_filename, res)    # 保存转换后的图片## cv2.imshow('GrayImage',img_cartoon)  # 加预览if __name__ == '__main__':imagelist = [] # 创建空列表#循环读取指定路径下的文件名for filename in os.listdir(r'in/'):imagelist.append(filename)  #将文件名添加到imagelistprint(filename)filter(r'in',filename)  # 为图片应用灰度滤镜

在这里插入图片描述

二、对图片进行二值化处理

什么叫图像的二值化?二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。

代码如下(示例):

# 对图片进行二值化======================================================
import cv2
import numpy as npimg1 = cv2.imread('01.jpg')
img2 = cv2.imread('02.jpg')
rows, cols, channels = img1.shape
roi = img2[0:rows, 0:cols]
img2gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
ret, Mask = cv2.threshold(img2gray, 170, 255, cv2.THRESH_BINARY)
Mask_inv = cv2.bitwise_not(Mask)
img1_bg = cv2.bitwise_and(roi, roi, mask=Mask)
img1_fg = cv2.bitwise_and(img1, img1, mask=Mask_inv)
dst = cv2.add(img1_bg, img1_fg)
img2[0:rows, 0:cols] = dst
cv2.imshow('res', Mask)
cv2.imshow('das', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

三、对图片去除噪点

实现原理:是在于先将噪点调亮以后再减少它的细节,总之就是让噪点“沉”下去。
代码如下(示例):

import cv2
import numpy as nporiginal_image1 = cv2.imread('in/01.jpg').astype(np.float32)/255# 设置调整颜色参数,小于1时,数值越小,越具有美白效果。反之,大于1时数值越大,可对美白照片还原原色
gamma1 = 0.6
whitening = np.power(original_image1, gamma1)# 去除噪点
denoise = cv2.medianBlur(whitening, 5)cv2.imshow('original_image', original_image1)
cv2.imshow('whitening', whitening)
cv2.imshow('denoise', denoise)

在这里插入图片描述

四、调整图片透明度

实现原理:需要在RGB三个通道的基础上添加alpha通道信息(alpha通道)。
代码如下(示例):

# 实时调整图片透明度
import cv2
import numpy as npdef callback(object):passcv2.namedWindow('image')
img1 = cv2.imread('01.jpg')
[x, y, z] = img1.shape
# 创建一个相同规格的图像,可以自己读取一张图用切片工具
# 选出相同大小的矩阵
img2 = np.zeros([x, y, z], img1.dtype)
B, G, R = 10, 88, 21  # 自己调色
img2[:, :, 0] = np.uint8(B)
img2[:, :, 1] = np.uint8(G)
img2[:, :, 2] = np.uint8(R)
cv2.createTrackbar('alpha', 'image', 0, 100, callback)while True:Alpha = cv2.getTrackbarPos('alpha', 'image')/100img3 = cv2.addWeighted(img1, Alpha, img2, 1-Alpha, 0)cv2.imshow('image', img3)if cv2.waitKey(10) & 0xFF == ord('q'):break
cv2.destroyAllWindows()

在这里插入图片描述

五、生成素描滤镜效果图(方法结合应用)

代码如下(示例):

import cv2  # 导入OpenCV-Python模块
import os   # 导入文件与系统模块
import numpy as np  # 导入数值计算库def filter(filein,picture_name):imgI_filename = os.path.join(filein,picture_name) # 源文件路径imgO_filename = os.path.join(r'out', picture_name)  # 目标文件路径img_rgb = cv2.imread(imgI_filename)  # 读取源图片num_down = 2   # 缩减像素采样的数目num_bilateral = 9 # 定义双边滤波的数目# 用高斯金字塔降低取样img_color = img_rgbfor _ in range(num_down):img_color = cv2.pyrDown(img_color)# 重复使用小的双边滤波代替一个大的滤波for _ in range(num_bilateral):img_color = cv2.bilateralFilter(img_color,d=4,sigmaColor=8,sigmaSpace=4)# 升采样图片到原始大小for _ in range(num_down):img_color = cv2.pyrUp(img_color)img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)  # 转换为灰度img_blur = cv2.medianBlur(img_gray, 19)  # 增加模糊效果。值越大越模糊(取奇数)# 检测到边缘并且增强其效果img_edge = cv2.adaptiveThreshold(img_blur,256,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,blockSize=9,C=2)img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB) # 彩色图像转为灰度图像cv2.imwrite(imgO_filename, img_edge) # 保存图片if __name__ == '__main__':imagelist = [] # 创建空列表#循环读取指定路径下的文件名for filename in os.listdir(r'in/'):imagelist.append(filename)  #将文件名添加到imagelistprint(filename)filter(r'in',filename)  # 为图片应用写生素描滤镜

在这里插入图片描述

六、生成动漫卡通滤镜效果图(方法结合应用)

代码如下(示例):

import cv2  # 导入OpenCV-Python模块
import os   # 导入文件与系统模块
import numpy as np  # 导入数值计算库def filter(filein,picture_name):imgI_filename = os.path.join(filein,picture_name) # 源文件路径imgO_filename = os.path.join(r'out', picture_name)  # 目标文件路径img_rgb = cv2.imread(imgI_filename)  # 读取图片# 转换为灰度并且使其产生中等的模糊img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)img_blur = cv2.medianBlur(img_gray, 5)  # 值越大越模糊(取奇数)#检测到边缘并且增强其效果img_edge = cv2.adaptiveThreshold(img_blur,128,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,blockSize=9,C=8)img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB) #彩色图像转为灰度图像img_cartoon = cv2.bitwise_and(img_rgb, img_edge)  # 灰度图像转为彩色图像# 调整亮度和对比度res = np.uint8(np.clip((2.0 * img_cartoon + 16), 0, 255))# 保存转换后的图片cv2.imwrite(imgO_filename, res)if __name__ == '__main__':imagelist = [] # 创建空列表#循环读取指定路径下的文件名for filename in os.listdir(r'in/'):imagelist.append(filename)  #将文件名添加到imagelistprint(filename)filter(r'in',filename)  # 为图片应用卡通动漫滤镜

在这里插入图片描述


总结

到此这篇关于python学习之OpenCV-Python模块的部分应用示例的文章就介绍到这了,更多相关python学习内容浏览下面的相关文章,希望大家以后多多支持!

历史文章地址:
python和C++代码实现图片九宫格切图程序(附VS2015配置Opencv教程)
python和C++代码实现模拟动态指针时钟
python学习之10行代码制作炫酷的词云图(匹配指定图形形状)


http://www.ppmy.cn/news/400140.html

相关文章

【HTML】HTML网页设计----动漫网站设计

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

真二次元!动漫形象风格迁移

点击上方“机器学习与生成对抗网络”,关注星标 获取有趣、好玩的前沿干货! 文章:机器之心 一张输入人脸图像,竟能生成多样化风格的动漫形象。伊利诺伊大学香槟分校的研究者做到了,他们提出的全新 GAN 迁移方法实现了「…

动漫

转载于:https://www.cnblogs.com/zxy160/p/7828427.html

动漫风格化—AnimeGANv2

animegan2_face2paint_v2 bryandlee/naver-webtoon-faces AnimeGANv2 项目 [Project]AnimeGANv2 摘要 在计算机视觉和艺术风格转移方面,将现实世界场景的照片转换为动漫风格的图像是一项有意义且具有挑战性的任务。我们之前提出的AnimeGAN结合了神经风格迁移合…

纯css动漫轮播图

效果 代码 <!doctype html> <html> <head> <meta charset"utf-8"><meta name"author" content"JiuMeilove"/> <title>窗口轮播图</title> <style> * {margin: 0;padding: 0; } body {backgrou…

GAN系列之动漫风格迁移AnimeGAN2

动漫是我们日常生活中常见的艺术形式&#xff0c;被广泛应用于广告、电影和儿童教育等多个领域。目前&#xff0c;动漫的制作主要是依靠手工实现。然而&#xff0c;手工制作动漫非常费力&#xff0c;需要非常专业的艺术技巧。对于动漫艺术家来说&#xff0c;创作高质量的动漫作…

记录用AnimeGAN将图转换成动漫风所遇到的问题

这项来自武汉大学和湖北工业大学的研究&#xff0c;采用的是神经风格迁移 生成对抗网络&#xff08;GAN&#xff09;的组合。 效果提前预览 论文出处&#xff1a;《AnimeGAN: a novel lightweight GAN for photo animation》 源码地址&#xff1a;https://github.com/Tachiban…

[深度学习 - 发现有趣项目] 动漫图生成手绘草图 Anime2Sketch

我公司的科室开始在公众号上规划一些对外的技术文章了&#xff0c;包括实战项目、模型优化、端侧部署和一些深度学习任务基础知识&#xff0c;而我负责人体图象相关技术这一系列文章&#xff0c;偶尔也会出一些应用/代码解读等相关的文章。 文章在同步发布至公众号和博客&#…