API接口函数为cv.imread(path, int),参数为:
import cv2 as cv
# 以灰度图的形式读取图像
img = cv.imread("cat.jpg", 0)
API接口为 cv.imshow()
参数:
import cv2 as cv
img = cv.imread("cat.jpg", 0) # 读取图像
print("image的大小为:", img.shape)
# 显示图像
cv.imshow("image", img)
cv.waitKey(0) # 在给定的时间内(ms单位级)等待用户按键触发;当用户有按下键时,接续等待
API接口:cv.imwrite(path, image)
参数:
import cv2 as cv
cv.imwrite("saveimage.png", img)
cv.line(img, start, end, color, thickness)
参数:
import cv2 as cv
import numpy as np
# 生成或读取要绘制直线的图像
img = np.zeros((320,320,3), np.uint8) # 利用numpy生成一灰度图像矩阵(值为0)
# 起点坐标 终点坐标
l_start = (50,200)
l_end = (200, 50) # 起始点和终点坐标为图像矩阵范围内的元组数据
# 线条颜色
l_color = (255, 0, 0) # BGR规则 8位 三元组
# 线条宽度
thickness = 1 # 整形数据
# 线类型
lineType = cv.LINE_8 # 8连接线
# lineType = cv.LINE_4
# lineType = cv.LINE_AA # 锯齿线
cv.line(img, l_start, l_end, l_color, thickness, l_type)
cv.namedWindow("line_image")
cv.imshow("line_image", img)
cv.waitKey(10000)
cv.destroyAllWindows()
API接口:
cv.circle(img, centerpoint, r, color, thickness)
参数:
import cv2 as cv
import numpy as np
img = np.zeros((260, 260, 3), np.uint8) # 生成一个灰度图像
print("image的大小为:", img.shape)
# 绘制圆形
c_c = (50, 50)
c_r = 10
c_color = (0, 255, 0)
thickness = 1
# thickness = -1
c_type = 4
# c_type = 8
# c_type = 0
cv.circle(img, c_c, c_r, c_color, thickness, c_type)
cv.namedWindow("circle")
cv.imshow("circle", img)
cv.waitKey(10000)
cv.destroyAllWindows()
API接口:
cv.rectangle(img, leftupper, rightdown, color, thickness, lineType, shift)
参数:
import numpy as np
import cv2 as cv
img = np.zeros((300, 300, 3 ), np.uint8)# 生成一个灰度图像
print("image的大小为:", img.shape)
# 矩形左上角
r_lu = (100, 100)
# 矩形右下角
r_rd = (200, 200)
# 线条颜色
r_color = (0, 255, 0) # BGR 三维数据
# 线条宽度
r_thickness = 4 # 整形数据
# 线条类型
lineType = cv.LINE_8
# lineType = cv.LINE_4
# lineType = cv.LINE_AA
cv.rectangle(img, r_lu, r_rd, r_color, r_thickness, lineType)
cv.namedWindow("rectangle")
cv.imshow("rectangle", img)
cv.waitKey(10000)
cv.destroyAllWindows()
API接口:
cv.putText(img, text, station, font, fontsize, color, thickness, lineType, bottomLeftOrigin)
参数:
import numpy as np
import cv2 as cv
img = np.zeros((300, 300, 3), np.uint8)
# 添加文字
text = "opencv"
# 文字左下角坐标
station = (60, 60)
# 字体
font = cv.FONT_HERSHEY_COMPLEX
# 字大小
font_size = 0.5
# 字颜色
font_color = (0, 255, 0) # BGR
# 线条宽度
thickness = 4
# 线条类型
lineType = cv.LINE_8
# lineType = cv.LINE_4
# lineType = cv.LINE_AA
cv.putText(img, text, station, font, font_size, font_color, thickness, lineType)
根据行和列的坐标值来获取该像素点的像素值。对于BGR图像,返回一个蓝、绿、红的数组。对于灰度图像,仅返回相应的强度值。同时,可以使用相同方法进行像素值修改。
如:
import cv2 as cv
img = cv.imread("./cat.jpeg", 3)
# 获取某点的像素值
px = img[100, 100]
# 仅获取蓝色通道的强度值
blue = img[100, 100, 0]
# 修改某个位置的像素值
img[100, 100] = [255, 255, 255]
图像属性包括行数、列数和通道数,图像数据类型,像素数等
import cv2 as cv
img = cv.imread("./cat.jpeg", 3)
# 图像形状
img_shape = img.shape
# 图像大小
img_size = img.size
# 图像数据类型
img_dtype = img.dtype
有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。你可以通过以下方式完成。
import cv2 as cv
img = cv.imread("./cat.jpg", 3)
# 通道拆分
b, g, r = cv.split(img)
# 通道合并
img = cv.merge((b, g, r))
OpenCV中有150多种颜色空间转换方法。最广泛使用的转换方法有两种,BGR↔Gray和BGR↔HSV。
import cv2 as cv
cv.cvColor(input_image, flag)
参数: