前言

这个系列的很多内容都是粘来大佬的总结,再加上自己的测试和一点小心得,组成了这个系列,所以这只作为个人笔记和学习记录,如有错误,希望可以不吝指出。

学习目标:

自己能不能在一个月的时间内做出一个对团队有用的视觉项目

学习内容:

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)

opencv如何有声音 opencv使用_加载

#读取
img = cv2.imread('/home/ren/mmdetection/demo/demo.jpg',-1)

opencv如何有声音 opencv使用_opencv如何有声音_02

在显示这张图片时,第二参数为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值被储存在一个列表里,例如

opencv如何有声音 opencv使用_opencv_03

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 ] )

结果:

opencv如何有声音 opencv使用_计算机视觉_04

outimg = cv2.imwrite("/home/ren/image/test.jpg" , img , [ int(cv2.IMWRITE_JPEG_QUALITY),5] )

opencv如何有声音 opencv使用_加载_05

可以看出来,两者分辨率的差别还是挺大的。

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)

opencv如何有声音 opencv使用_opencv如何有声音_06

图片中第100行,第100列的像素点直接被改成了白色(255,255,255)

修改像素的Red大小

print(img.item(150,150,2))
img.itemset((150,150,2),100)

第一行print出第150行,150列的Red值

第二行直接将Red值修改为100

结果如下:

opencv如何有声音 opencv使用_opencv如何有声音_07

可以看到Red值已经被修改为100。