opencv 实践入门1 - 安装,准备和测试

我只是一名搬砖工,无意侵犯各位大佬知识产权。
最近因项目组需要,开始学图像处理
所以记录一下这个过程以及经验,希望能帮到大家

学习参考资料:

1.《图像处理的数学修养》

  1. github 上的OpenCV-Python-Tutorial

若想系统地学习,麻烦移步到 github或买书啃一下


安装 Python openCV

  1. anaconda cloud 搜索 opencv
  2. 选择合适的版本,我选的是第四个(anaconda/opencv, 其他版本我也不懂,要请教其他大佬)
  3. 点击去,根据上面的命令安装,比如:这个是 conda install -c anaconda opencv (蓝色框)
  • 将这一句命令直接复制到你的 termnial (mac端) 或 cmder (win端, win+R, 输入 'cmd',出现小黑框),直接按回车,anaconda 会检查需要安装的附加包,选择 y,一并下载和安装。
  • 红色框是 opencv 的官方说明(英文),有能力的朋友可以看看,这会学习很有帮助

如果不知道什么是 anaconda,或者还没有安装 Python 的朋友,建议可以看看我写的另一篇文章

测试是否安装成功

  1. 准备一张图片,打开 spyder
import cv2

png = '/Users/brain.png'   ##图片放置的路径,最好放绝对路径,肯定不会出错。(我是 mac 玩家,win 玩家自行修改)
img = cv2.imread(png,0)  # imread 读入(加载)图片,参数1,图片文件路径,参数2,读入图片格式,*1*:彩色(默认),*0*:灰度图,*-1*:包含透明通道的彩色图

cv2.imshow('brain',img)  ## 显示图片,参数1,窗口名字(随便命名),参数2,要显示的图片

直接使用 imshow,不能调节显示窗口大小.png

可以先预设一个窗口 namedWindow,在这个窗口中打开图片,这样设置的窗口可以在打开后调整大小,适用于图片较大的情况

import cv2

png = '/Users/brain.png'
img = cv2.imread(png,0)

# 先定义窗口,后显示图片
cv2.namedWindow('brain2', cv2.WINDOW_NORMAL) ##参数1是窗口名字,参数2 可选(cv2.WINDOW_AUTOSIZE:窗口大小自适应图片, cv2.WINDOW_NORMAL:窗口大小可调整)
cv2.imshow('brain2', img)
cv2.waitKey(0)
### waitKey 是让程序暂停,数字是暂停的时间,0代表一直等待

# 等待期间可以获取用户按键输入,如

k = cv2.waitKey(0)
if k == 's':
    cv2.imshow('brain2', img)
    cv2.destroyAllWindows()  ### 关闭所有打开的窗口
使用namedWindow里面的cv2.WINDOW_NORMAL可以设置窗口大小.png

保存照片 cv2.imwrite()

import cv2

png = '/Users/brain.png'
picture = cv2.imread(png,0)

cv2.imwrite('brain_gray.jpg',picture)

处理前后对比.png

小结 (基础测试操作)

  • cv2.imread() 读入图片

    1. 如果缺少文件,权限不当,格式不受支持或无效,当print(图片)时,将返回None.
    2. 该函数通过内容而不是文件扩展名来决定图像类型.
    3. 图像数据将以B,G,R的顺序存储. (mat接口)
  • cv2.imshow() 显示图片

    1. 打开图片后退出关闭不了,卡住了
      解决办法:(在我 macbook 上成功了,供大家参考)
    2. 用 cv2.destroyAllWindows(),并在其后面加 cv2.waitKey(1)
    cv2.destroyAllWindows()
    cv2.waitKey(1)
    
    其他地方爬到的解释,我没没怎么看懂,但是确实有用.png
  • cv2.imwrite() 保存图片

    1. cv2.imwrite(filename, img,[, params]) ## filename 保持路径,img保存的图像名,
    2. params (对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第 三个参数表示的是压缩级别。默认为3)
    3. 完整代码:
    cv2.imwrite('/Users/output/brain.png', img,[int(cv2.IMWRITE_JPEG_QUALITY), 90])
    
  • cv2.waitKey(0) 让程序等待

    • 括号里面的数字代表时间,单位 ms。0表示一直等待
    • 在等待的过程中,可以接受用户输入,如:
      需要注意的是,这里的输入不在 console,而是要点击图片窗口
    input = cv2.waitKey(0)
    

应用: (原地址)
  1. 加载一幅灰度图像,显示它,如果按's'则保存图像并退出,如果按ESC键直接退出
import cv2

img = cv2.imread('/Users/brain.png',0)
cv2.imshow('brain',img)
k = cv2.waitKey(0)& 0xFF
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
    cv2.waitKey(1)
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('brain_gray.png',img)
    cv2.destroyAllWindows()
    cv2.waitKey(1)
  1. 和Python 的Matplotlib结合使用.
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('/Users/brain.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()