Python中的cv2使用
模块 cv2 的用法 - 陨落&新生 - 博客园 (cnblogs.com)
Python-OpenCV 基本操作 cv2 - 菜鸟程序猿_python - 博客园 (cnblogs.com)
常用方法
读取图像
cv2.imread(filepath,flags)
filepath:要读入图片的完整路径
flags:读入图片的标志
- cv2.IMREAD_COLOR:默认参数(3),读入一副彩色图片,忽略 alpha 通道
- cv2.IMREAD_GRAYSCALE:读入灰度图片
- cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括 alpha 通道
写入图像
cv2.imwrite(filepath, img, flags)
- filepath: 要保存图像的文件名
- img: 要保存的图像
- flags: 可选的第三个参数,它针对特定的格式:对于 JPEG,其表示的是图像的质量,用 0 - 100 的整数表示,默认 95;对于 png ,第三个参数表示的是压缩级别。默认为 3.
cv2.IMWRITE_JPEG_QUALITY 类型为 long ,必须转换成 int
cv2.IMWRITE_PNG_COMPRESSION, 从 0 到 9 压缩级别越高图像越小。
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
显示图像
演示代码如下
import cv2
img = cv2.imread('temp.jpg')
cv2.imwrite('save.jpg', img)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindow()
img 的一些属性
img.shape # (1200, 1920, 3) 宽、高、通道数
img.size # 像素个数
img.dtype # uint8
颜色转化
由于 cv2 得到的图片是 BGR 格式,而非传统的 RGB 格式,因此需要进行转化。
有以下三种方法
im_bgr = cv2.imread('temp.jpg')
im_rgb = im_bgr[:, :, [2, 1, 0]]
im_rgb = im_bgr[:, :, ::-1]
im_rgb = cv2.cvtColor(im_bgr, cv2.COLOR_BGR2RGB)
还有一些颜色空间转化
#彩色图像转为灰度图像
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#灰度图像转为彩色图像
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
# cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
cv 图片对象与二进制图片转化
def bytes2cv(im):
return cv2.imdecode(np.array(bytearray(im), dtype='uint8'), cv2.IMREAD_UNCHANGED)
def cv2bytes(im):
return np.array(cv2.imencode('.png', im)[1]).tobytes()
添加边框
import cv2
poses = [[111, 46, 151, 86], [177, 46, 212, 80],
[246, 89, 286, 128], [240, 18, 280, 56]]
img = cv2.imread("1.jpg")
for box in poses:
x1, y1, x2, y2 = box
img = cv2.rectangle(img, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)
cv2.imwrite("result.jpg", img)
添加文本
import cv2
img = cv2.imread('temp.jpg')
# 图片对象、文本、像素、字体、字体大小、颜色、字体粗细
img_text = cv2.putText(img, "wenhao", (50, 50),
cv2.FONT_HERSHEY_DUPLEX, 5.5, (35, 175, 255), 2)
cv2.imwrite("result.jpg", img_text)
效果如下
图片缩放
import cv2
img = cv2.imread("1.png")
cv2.imshow("img", img)
img1 = cv2.resize(img, (200, 100))
cv2.imshow("img1", img1)
cv2.waitKey()