共计 1160 个字符,预计需要花费 3 分钟才能阅读完成。
现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用 Python 就可以实现。
环境要求
Python3 numpy 函数库 opencv 库
安装
下载适应版本的 numpy 函数库,我电脑是 WIN10 64 位,安装的函数库是 numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl
下载适应版本的 numpy 函数库,我电脑是 WIN10 64 位,安装的函数库是 opencv_python-3.3.1-cp36-cp36m-win_amd64.whl
安装以上两个库,WIN+R->CMD->CD 到当前两个库所在的文件夹,输入以下命令逐步安装
pip install numpy-1.13.1+mkl-cp36-cp36m-win_amd64.whl
pip install opencv_python-3.3.1-cp36-cp36m-win_amd64.whl
以上两个文件下载地址:晚点发,还在审核!
代码
在当前文件夹新建 opencv.py,拷贝以下代码
import cv2
import numpy as np
img=cv2.imread(‘timg.jpg’)
#缩放
rows,cols,channels = img.shape
img=cv2.resize(img,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
cv2.imshow(‘img’,img)
# 转换 hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_blue=np.array([90,70,70])
upper_blue=np.array([110,255,255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
cv2.imshow(‘Mask’, mask)
# 腐蚀膨胀
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow(‘erode’,erode)
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:
img[i,j]=(0,0,255)# 此处替换颜色,为 BGR 通道
cv2.imshow(‘res’,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
说明
第四行 timg.jpg 是原图片路径 lower_blue=np.array([90,70,70]) 里面三个数值可以控制好处理出来的效果和噪点
WIN+R->CMD->CD 到 opencv.py 文件夹,运行
DEMO