文章目录

  • 1. 读入并显示图片
  • 2. 缩放图片
  • 3. 彩色图像转换为灰度图像
  • 4. 图片二值化处理
  • 5. 图像的腐蚀和膨胀
  • 6. 遍历像素点进行颜色替换
  • 7. 其他说明

OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于 BSD 许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。相比于 PIL 库来说 OpenCV 更加强大, 可以做更多更复杂的应用,比如人脸识别等。

1. 读入并显示图片

import cv2# 读入图片
img = cv2.imread(r'D:\test\test_001.jpg', 1)# 显示图像
cv2.imshow('img', img)# 窗口等待命令  0表示无限等待
cv2.waitKey(0)

运行效果如下:

2. 缩放图片

import cv2# 读入图片
img = cv2.imread(r'D:\test\test_001.jpg', 1)
rows, cols, channels = img.shape
print(rows, cols, channels)new_img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = new_img.shape
print(rows, cols, channels)# 显示图像
cv2.imshow('new_img', new_img)# 窗口等待命令  0表示无限等待
cv2.waitKey(0)

将图片尺寸按比例缩小一半,运行效果如下:

3. 彩色图像转换为灰度图像

彩色图片有 RGB 三个颜色通道,无法进行腐蚀和膨胀的操作。这个就需要我们将彩色图片转换为 hsv 灰度图像后,再进行腐蚀和膨胀操作。

import cv2img = cv2.imread(r'D:\test\test_001.jpg', 1)
new_img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = new_img.shape
print(rows, cols, channels)# 显示图像
cv2.imshow('new_img', new_img)# 将图片转换为灰度图片
gray_img = cv2.cvtColor(new_img, cv2.COLOR_BGR2HSV)
cv2.imshow('hsv', gray_img)
cv2.waitKey(0)

运行效果如下:

4. 图片二值化处理

**图像二值化( Image Binarization)**就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。图像二值化处理后,为 1 的为白色点,为 0 的为黑色点。

import cv2
import numpy as npimg = cv2.imread(r'D:\test\test_001.jpg', 1)
new_img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = new_img.shape
print(rows, cols, channels)# 显示图像
cv2.imshow('new_img', new_img)# 将图片转换为灰度图片
gray_img = cv2.cvtColor(new_img, cv2.COLOR_BGR2HSV)
cv2.imshow('hsv', gray_img)# 图片二值化处理
low_value = np.array([90, 70, 70])
high_value = np.array([110, 255, 255])
binary_img = cv2.inRange(gray_img, low_value, high_value)
cv2.imshow('binary_img', binary_img)cv2.waitKey(0)

运行效果如下:

5. 图像的腐蚀和膨胀

图像的膨胀(Dilation)和腐蚀(Erosion)是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。其中膨胀类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大;腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小。

  • 图像被腐蚀后,去除了噪声,但是会压缩图像。
  • 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。
# 腐蚀膨胀
erode = cv2.erode(binary_img, None, iterations=1)
dilate = cv2.dilate(erode, None, iterations=1)
cv2.imshow('dilate', dilate)

6. 遍历像素点进行颜色替换

图像是由每一个像素点组成的,找到腐蚀后得到图片的白色底色处的像素点,然后将原图中对应位置处的像素点,替换为红色或者白色,即可实现给照片换底色。

import cv2
import numpy as npimg = cv2.imread(r'D:\test\test_001.jpg', 1)
new_img = cv2.resize(img, None, fx=0.5, fy=0.5)rows, cols, channels = new_img.shape
print(rows, cols, channels)# 显示图像
cv2.imshow('new_img', new_img)# 将图片转换为灰度图片
gray_img = cv2.cvtColor(new_img, cv2.COLOR_BGR2HSV)# 图片二值化处理
low_value = np.array([90, 70, 70])
high_value = np.array([110, 255, 255])
binary_img = cv2.inRange(gray_img, low_value, high_value)# 腐蚀膨胀
erode = cv2.erode(binary_img, None, iterations=1)
dilate = cv2.dilate(erode, None, iterations=1)
# cv2.imshow('dilate', dilate)# 遍历替换
for i in range(rows):for j in range(cols):if dilate[i, j] == 255:# 此处替换颜色,为BGR通道new_img[i, j] = (0, 0, 255)   # (0, 0, 255)替换为红底   (255, 255, 255)替换为白底cv2.imshow('red_bg_img', new_img)
# 窗口等待命令  0表示无限等待
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果如下:

程序运行成功,可以将照片的蓝底换为红底或者白底,成功利用 opencv 实现给照片换底色啦!

7. 其他说明

测试所用图片来源于百度图片搜索,图片仅用于图像处理知识交流和学习,如有侵权请联系我删除!

Python 教你用OpenCV实现给照片换底色相关推荐

  1. pyqt5与opencv对照片换底色

    前言 库 opencv-python pyqt5 换色原理 直言的说,在这篇大佬的文章中, (32条消息) Python 教你用OpenCV实现给照片换底色_叶庭云的博客-CSDN博客 可以实现换底色 ...

  2. python换照片底色_Python 利用OpenCV给照片换底色的示例代码

    OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和M ...

  3. 给照片换底色(python+opencv)

    给照片换底色(python+opencv) 本篇目录:

  4. python换照片底色_详解Python给照片换底色(蓝底换红底)

    现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Python就可以实现. 环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN1 ...

  5. 使用Python制作一个照片换底色的exe程序文件(详细教程)

    文章目录 前言 一.安装相对应的库 二.关于图片处理 1.关于RemoveBg 2.图片处理代码编写 3.窗口图片选择以及提示函数 4.可视化窗口 5.打包成exe程序 写在最后 前言 在校大学生,突 ...

  6. python如何使用图片做背景_Python实现给照片换底色(附代码)

    本篇文章给大家带来的内容是关于Python实现给照片换底色(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Pyt ...

  7. OpenCV实现照片换底色处理

    目录 1.导言 2.引言 3.代码分析 4.优化改进 5.总结 1.导言 在图像处理领域,OpenCV是一款强大而广泛应用的开源库,能够提供丰富的图像处理和计算机视觉功能.本篇博客将介绍如何利用Qt ...

  8. gimp 2 照片 换底色_使用GIMP或Photoshop创建Instagram风格的照片效果

    gimp 2 照片 换底色 You've probably seen lots of vintage photo effects, or maybe even made some of your ow ...

  9. python如何使用图片做背景_用Python批量给照片换底色,基于opencv模块

    现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Python就可以实现. 环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN1 ...

最新文章

  1. Java 静态变量,静态方法,静态常量(java static 关键字)
  2. .NET,你忘记了么?(二)——使用using清理非托管资源
  3. 图片日志:深拷贝和浅拷贝的区别/序列化及反序列化
  4. 解惑烟草行业工控系统如何风险评估
  5. Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
  6. Bitmap添加文字水印
  7. CABAC之手把手教你编码
  8. 利用opencv添加mask
  9. echarts3 graph java_Echarts中graph类型的运用求教
  10. Rank Math Pro v2.17.1 SEO插件
  11. 开盘暴涨193.9%,市值1.39万亿港元!快手正式上市
  12. php memcached 例子,php下Memcached入门实例解析
  13. 论文阅读之ALBERT
  14. xFire两种客户端的传递参数
  15. matlab非牛顿流体,可用于常见非牛顿流体的数值模拟方法与流程
  16. 二级域名原理以及程序代码
  17. jq 点击按钮跳转到微信_实现点击复制微信号并自动打开微信加好友
  18. python 网络字节序转换_python网络编程:ntohl、htonl、ntohs、htons
  19. Java Swing入门
  20. CSS3教程:Responsive框架常见的Media Queries片段

热门文章

  1. Mysql分割字符串并对分割后的数据进行查询翻译
  2. golang入门实战(二)
  3. Java模拟ATM机系统
  4. Go语言6种字符串拼接的方式
  5. 学习-Java字符串之String类常用方法之字符串长度
  6. 两数之和(LeetCode)
  7. 如何理解PoW工作量证明?
  8. springboot 自定义注解拦截器
  9. 网站长尾关键词的挖掘与优化
  10. LZO和MiniLZO编码介绍