第一次使用opencv,遇到了很多问题,记录一下
安装问题
代理
由于pip使用了代理而电脑代理没开,导致pip install opencv-python时一直报错连接不上代理
解决办法:
- 使用pip install -i <清华源>
- 开启代理
无法引入jar包
安装完成后在交互模式可以正常使用
输入python
import cv2
不报错就说明正常安装了
但是在jupyter notebook 中引入一直报错,找不到cv2模块
经过百度后,测试如下
在交互模式下输入如下命令查看python环境
import sys
sys.executable
这是anaconda下的一个虚拟环境,没有问题
再在jupyter notebook下输入同样的命令,查看python环境,发现竟然不是上述环境
而是 anaconda3/share下的环境
至此,就查询到了问题的原因:
jupyter notebook 是anaconda的公共包
进入虚拟环境后 pip install jupyter 再次启动jupyter notebooke 就正常了
使用opencv及原理
这是个啥? -> http://c.biancheng.net/view/1089.html
使用opencv换照片底色的原理很简单
- 读取照片
- 将照片转换为灰度图
- 提取灰度图底色的BGR上下边界
- 使用opencv转换背景底色的BGR值(第三步已经获取了背景色的上下边界,边界之中的所有颜色都会被转换为255,边界之外的颜色都会被处理为0)
- 循环处理像素点,将第四步转换后的255(背景色)转换为你想要的颜色
- 输出,保存
importcv2importnumpyasnp# 读取照片img=cv2.imread('zhuominghua.jpg') # 图像缩放img=cv2.resize(img,None,fx=0.5,fy=0.5) rows,cols,channels=img.shapeprint(rows,cols,channels) cv2.imshow('[img]',img) # 图片转换为灰度图hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) # 查看灰度图cv2.imshow('hsv',hsv) # 图片的二值化处理lower_blue=np.array([100,0,200]) upper_blue=np.array([200,255,255]) mask=cv2.inRange(hsv, lower_blue, upper_blue) print(mask) #腐蚀膨胀erode=cv2.erode(mask,None,iterations=1) # cv2.imshow('erode',erode)dilate=cv2.dilate(erode,None,iterations=1) # cv2.imshow('dilate',dilate)#遍历每个像素点,进行颜色的替换foriinrange(rows): forjinrange(cols): iferode[i,j]==255: # 像素点为255表示的是白色,我们就是要将白色处的像素点,替换为红色img[i,j]=(255,255,255) # 此处替换颜色,为BGR通道,不是RGB通道# 显示处理后的图片cv2.imshow('res',img) # 保存cv2.imwrite("zhuominghu_white.jpg", img) # 窗口等待的命令,0表示无限等待cv2.waitKey(0)
代码是参照网上的例子,经过实验,很好用
但是在图片的二值化处理阶段,比较麻烦,需要从灰度图中获取背景色的BGR值,再计算上下边界
灰度图的颜色使用BGR表示的,而不是 RGB
使用的到方法:
- imread() 读取源图片
- imshow() 展示图片
- imwrite() 输出图片
- cvtColor() 转换灰度图
- inRange() 二值化处理,将上下边界内的颜色值处理为255,其他的颜色值处理为0