前言
这个系列的很多内容都是粘来大佬的总结,再加上自己的测试和一点小心得,组成了这个系列,所以这只作为个人笔记和学习记录,如有错误,希望可以不吝指出。
学习目标:
自己能不能在一个月的时间内做出一个对团队有用的视觉项目
学习内容:
opencv的基本使用方法
1.导入模块
import cv2
2.加载和读取图像
cv2.imread(filename, int flag=1)
第一个参数为图片的当前路径或者完整路径,第二个参数是需要读取图像的方法
有三种方法
cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。
cv2.IMREAD_GRAYSCALE : 加载一张灰度图。
cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道(Alpha通道个人理解就是控制不透明度的通道)
提示:如果觉得以上标识太麻烦,可以简单的使用1,0,-1代替。
#读取
img = cv2.imread('/home/ren/mmdetection/demo/demo.jpg',0)
#读取
img = cv2.imread('/home/ren/mmdetection/demo/demo.jpg',-1)
在显示这张图片时,第二参数为1和-1的结果不变。
3.显示图像
imshow第一个参数是窗口名,第二个参数是图片路径
cv2.imshow("image" , img)
#表示永久等待键盘输入,waitKey()是键盘绑定函数,时间尺度是毫秒级,特定的几毫秒内,如果有键盘输入,函数会返回按键的ASCII码值
如果你用的是 64 位系统,你需要将cv2.waitKey(0) 这行改成 cv2.waitKey(0)&0xFF
cv2.waitKey(0)
#删除建立的窗口,删除特定的窗口用cv2.destroyWindow(),参数是想删除的窗口名
cv2.destroyAllWindows()
发现很有趣的一点,在使用上述方法显示图像时,可以一直放大,会看到每个像素点的RGB值,RGB值被储存在一个列表里,例如
4.保存图片
cv2.imwrrite(filename,img[,params])->返回值,参数:filename是文件名称,img是保存的图像,
作用:将图像保存成指定格式的文件,注意这里的params是一个数组
对于JPEG,可以是有质量的保存 CV_IMWRITE_JPEG_QUALITY 从0到100,100表示最高保存质量,默认95
对于WEBP, CV_IMWRITE_WEBP_QUALITY
对于PNG,可以是压缩级别 CV_IMWRITE_PNG_COMPRESSION:从0到9,越小表示保存的大小越大,压缩时间越少,默认为3
alpha为0时表示透明,255时表示不透明
#注意cv2.IMWRITE_PNG_COMPRESSION类型为Long,必须转换成int
outimg = cv2.imwrite('/home/ren/mmdetection/demo/demo.jpg' , img , [ int(cv2.IMWRITE_PNG_COMPRESSION),9 ] )
outimg = cv2.imwrite('/home/ren/mmdetection/demo/demo.jpg' , img , [ int(cv2.IMWRITE_PNG_COMPRESSION),0 ] )
cv2.imshow("outimg" , outimg)
cv2.waitKey(0)
cv2.destroyWindow("outimg")
测试时间到
outimg = cv2.imwrite("/home/ren/image/test.jpg" , img , [ int(cv2.IMWRITE_JPEG_QUALITY),100 ] )
结果:
outimg = cv2.imwrite("/home/ren/image/test.jpg" , img , [ int(cv2.IMWRITE_JPEG_QUALITY),5] )
可以看出来,两者分辨率的差别还是挺大的。
5.修改像素值
图像可以理解为二维数组,给出行列则得到BGR,注意不是RGB,一个像素是一个三元组
px = img[100,200]
print(px)
img[100,100]指在图片中第100行,第200列的像素点
print出来的结果是它的BGR值
[16 9 22]
Blue是16,Green是9,Red是22。
so easy
px = img[100,200,0]
print(px)
如果像这样,后面还有一个参数,那么0指的是Blue值
输出的结果只有16,G(1)和R(2)同理
#给出BGR的三元组来直接修改像素值
img[100,100] = [255,255,255]
px = img[100,100]
print(px)
图片中第100行,第100列的像素点直接被改成了白色(255,255,255)
修改像素的Red大小
print(img.item(150,150,2))
img.itemset((150,150,2),100)
第一行print出第150行,150列的Red值
第二行直接将Red值修改为100
结果如下:
可以看到Red值已经被修改为100。