由于pip总是更新不了,结束python学习后花了很长时间研究如何install opencv库,好在最后找到了一个很实用的博客,在Anaconda上创建了一个新环境,可以开始学习opencv啦!天知道我的import cv2没报错我有多么快乐!!!
1.读取图像
通过函数cv.imread实现
img = cv.imread(文件名,[,参数])
第二个参数是一个标志,它指定了读取图像的方式。
【1】cv.IMREAD_COLOR: 加载彩色图像,任何图像的透明度都会被忽视,如果不传参 数,这个值是默认值。
【2】cv.IMREAD_GRAYSCALE:以灰度模式加载图像。
【3】cv.IMREAD_UNCHANGED:加载图像,包括alpha通道
注意:这三个标志可以简化为 1 、 0 、 -1 。
注:
要先说清楚文件的路径,而且路径里面不能有中文(maybe?没有中文了就没bug了好神奇)而且\t也会标红,唉,又把文件名改成est01了
img = "F:\est01\mh.jpg"
最简单的却报了无数个错,真的怀疑人生了
1.OpenCV 读取图像文件,返回值是一个nparray 多维数组。OpenCV 对图像的任何操作,本质上就是对 Numpy 多维数组的运算。
2.OpenCV 中彩色图像使用 BGR 格式,而 PIL、PyQt、matplotlib 等库使用的是 RGB 格式。
3.cv2.imread() 如果无法从指定文件读取图像,并不会报错,而是数返回一个空矩阵。
4.cv2.imread() 指定图片的存储路径和文件名,在 python3 中不支持中文和空格(但并不会报错)。必须使用中文时,可以使用 cv2.imdecode() 处理,参见扩展例程。
5.cv2.imread() 读取图像时默认忽略透明通道,但可以使用 CV_LOAD_IMAGE_UNCHANGED 参数读取透明通道。
6.对于彩色图像,可以使用 flags=0 按照读取为灰度图像。
基本例程:
# 1.1 图像的读取
imgFile = "../images/imgLena.tif" # 读取文件的路径
img1 = cv2.imread(imgFile, flags=1) # flags=1 读取彩色图像(BGR)
img2 = cv2.imread(imgFile, flags=0) # flags=0 读取为灰度图像
拓展历程:
指定大小
# 1.7 图像显示(按指定大小的窗口显示图像)
imgFile = "../images/imgLena.tif" # 读取文件的路径
img1 = cv2.imread(imgFile, flags=1) # flags=1 读取彩色图像(BGR)
cv2.namedWindow("Demo3", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Demo3", 400, 300)
cv2.imshow("Demo3", img1) # 在窗口 "Demo3" 显示图像 img1
key = cv2.waitKey(0) # 等待按键命令, 1000ms 后自动关闭
网图
# 1.2 从网络读取图像
import urllib.request as request
response = request.urlopen("https://profile.csdnimg.cn/8/E/F/0_youcans")
imgUrl = cv2.imdecode(np.array(bytearray(response.read()), dtype=np.uint8), -1)
中文
# 1.3 读取中文路径的图像
imgFile = "../images/测试图01.png" # 带有中文的文件路径和文件名
# imread() 不支持中文路径和文件名,读取失败,但不会报错!
# img = cv2.imread(imgFile, flags=1)
# 使用 imdecode 可以读取带有中文的文件路径和文件名
img = cv2.imdecode(np.fromfile(imgFile, dtype=np.uint8), -1)
2.显示图像
cv.imshow(窗口名, 图像名)
m1 = cv.imread(img, 1)
cv.imshow("demo", m1)
例:
cv.imshow("demo", m1)
3.窗口等待
cv.waitKey() 是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果 0 被传递,它将无限期地等待一次敲击键。
cv.waitKey(delay)
例:
key = cv.waitKey(0)
4.成功显示啦!
import cv2 as cv
img = "F:\est01\mh.jpg"
m1 = cv.imread(img, 1)
cv.imshow("demo", m1)
key = cv.waitKey(0)
5.图像保存
函数格式:
retval = cv2.imwrite(filename, img [, paras])
例:
img2 = "F:\est01\ele02.jpg"
m2 = cv.imread(img2, 1)
saveAdd = "F:\est01\savedele02.jpg"
cv.imwrite(saveAdd, m2)
-
filename:要保存的文件的路径和名称,包括文件扩展名
-
img:要保存的 OpenCV 图像,nparray 多维数组
-
paras:不同编码格式的参数,可选项
注:
cv2.imwrite() 保存的是 OpenCV 图像(多维数组),不是 cv2.imread() 读取的图像文件,所保存的文件格式是由 filename 的扩展名决定的,与读取的图像文件的格式无关。
成功保存: