python换照片底色_Python 利用OpenCV给照片换底色的示例代码
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 cv2
img = 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. 图片二值化处理
二值化处理是为了将图片转换为黑白图片,目的是滤除太大或太小值像素、消除噪声,从而从灰度图中获取二值图像(将图像的灰度值设置为0或255),实现增强整个图像呈现更为明显的黑白效果,同时也大大减少了数据量。
import cv2
import numpy as np
img = 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 np
img = 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给照片换底色的示例代码的文章就介绍到这了,更多相关python照片换底色内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
python换照片底色_Python 利用OpenCV给照片换底色的示例代码相关推荐
- python编写脚本教程_python编写一个会算账的脚本的示例代码
python算账脚本 1.假如小明卡里有10000元去商场买东西发现钱不够又向父母借了5000账单如下 2.以下脚本就能实现上面的运算 from time import strftime import ...
- python怎么建立画板_Python基于opencv实现的简单画板功能示例
本文实例讲述了Python基于opencv实现的简单画板功能.分享给大家供大家参考,具体如下: import cv2 import numpy as np drawing = False # true ...
- python简单目标检测代码_Python Opencv实现单目标检测的示例代码
一 简介 目标检测即为在图像中找到自己感兴趣的部分,将其分割出来进行下一步操作,可避免背景的干扰.以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全 ...
- [python] 工作记录一、利用opencv,numpy旋转图片无黑边(轮子必须由我造!!!)
[python] 工作记录一.利用opencv,numpy旋转图片无黑边(轮子必须由我造!!!) 1. 第三方库的安装 2. 程序目的 3. 图片理解 4. 编写代码 (1).旋转顺时针90° (2) ...
- 利用ffmpeg来进行视频解码的完整示例代码
(转)利用ffmpeg来进行视频解码的完整示例代码(H.264) Decode() { FILE * inpf; int nWrite; int i,p; int nalLen; unsign ...
- python图片切面_python 利用opencv进行图片切割
自学opencv也有十几天了,一直练习教程上面的例子总感觉不够,刚好碰到一个老师出的数学建模题涉及图片处理兴趣立马上来,决定利用所学的解决这个建模题 下面是数学建模题: 最强大脑 近期,江苏卫视正在热 ...
- python视频图片识别算法_python利用Opencv进行人脸识别(视频流+图片)
首先:需要在在自己本地安装opencv具体步骤可以问度娘 如果从事于开发中的话建议用第三方的人脸识别(推荐阿里) 1.视频流中进行人脸识别 # -*- coding: utf-8 -*- import ...
- 自学python(2):利用opencv实现读图,显示,画框,裁剪的python代码
#读图,显示的代码 import cv2 # 读取图像 img = cv2.imread(r'C:/labs/opencvtest/1.jpg', cv2.IMREAD_COLOR) #第一个参数是路 ...
- python 视频人脸替换_Python基于OpenCV实现视频的人脸检测
本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...
最新文章
- 重磅公开课推荐 | 如何搭建聊天机器人:技术架构剖析
- Mac 实现可以在 Finder 下直接打开 iTerm2 并跳转到当前目录
- Spring源码:IOC容器
- 第 二 十 八 天 :LB 负 载 均 衡 搭 建 之 LVS
- django_4:数据库0——配置数据库
- java算法是什么_什么是java算法
- php将日期转为时间戳,php将指定日期转换为时间戳的方法
- 计算机操作系统第四版课后题答案汤小丹
- Web前端开发CSS学习笔记2—五大类选择器
- matlab画收敛域,第二章习题与答案1.求以下序列的z变换并画出零极点图和收敛域.doc...
- 计算机重装系统知识,想学重装系统要怎么做?重难点知识讲解,零基础照样能够装系统!...
- 设备使用python连接阿里Iot
- 用python计算100以内所有奇数的和_python怎样求1到100的奇数和
- 陀螺仪mpu6050的使用(附带HAL的使用)
- c# rar解压大小_C#解压RAR压缩文件
- javaEE项目--琪琪线上餐厅系统
- 201712-4 行车路线 ccf
- int在c语言是什么意思,c语言int是什么意思-与非网
- 《拖延心理学》思维导图精华版
- MIMO-OFDM水声通信系统发展现状及趋势
热门文章
- 如何统计序列中元素的出现的频度
- 2020年8月, E-Form++可视化源码组件库最新企业版本2020第 二版发布!
- [日更-2019.4.8、4.9、4.12、4.13] cm-14.1 Android系统启动过程分析(一)-init进程的启动、rc脚本解析、zygote启动、属性服务...
- sap 修改主机名过程
- Tp5 实现短信发送及页面倒计时
- 音频文件的结构与规范——RIFF和WAVE音频文件格式
- 奶茶创业者,他打造了一间港式饮品专门店
- 鼠标垫测试软件,百款鼠标垫测试(项目)
- 某zhan sign
- 常用运行命令win10