cv.imread 读取一个图片
cv.namedWindow 命名一个窗口
cv.imshow显示图片
cv.waitKey 等待按键
cv.destroyAllWindows 销毁所有窗口
cv.VideoCapture 读取视频文件或者摄像头数据
cv.flip 图像 镜像
np.array(image) 求出图像像素
image.shape 求出图像的 长 宽 通道数
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2]
cv.bitwise_not(image) 像素反转
np.zeros([400, 400, 3], np.uint8) , 设置图像数据全为0
np.ones([400, 400, 3], np.uint8),设置图像数据全为1
cv.imwrite("D:/myImage.png", img),将img另存为 myimage.img
m2 = m1.reshape([1, 9]) 重新修改图像
cv.getTickCount() 得到当前计数
(t2-t1)/cv.getTickFrequency(); 计算出消耗时间(ms)
cv.cvtColor(frame, cv.COLOR_BGR2HSV) 将BGR图片转换位HSV
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)将BGR图片转换位灰度图像
yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)将BGR图片转换位YUV图像
Ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)将BGR图片转换位YCrCb图像
cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) 选的指定范围的图像颜色
bitwise_and 对图像每个像素值进行二进制“与”操作
bitwise_or对图像每个像素值进行二进制“或”操作
bitwise_xor对图像每个像素值进行二进制“异或”操作,1^1=0,1^0=1,0^1=1,0^0=0
bitwise_not对图像每个像素值进行二进制“非”操作,~1=0,~0=1
dst = cv.add(m1, m2) 图像加
dst = cv.subtract(m1, m2)图像减
dst = cv.divide(m1, m2) 图像除
dst = cv.multiply(m1, m2) 图像乘
dst = cv.addWeighted(image, c, blank, 1-c, b) 图像叠加
C++: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray
dst, int dtype=-1)
Parameters
src1 – First source array.
alpha – Weight for the first array elements.
src2 – Second source array of the same size and channel number as src1 .
beta – Weight for the second array elements.
dst – Destination array that has the same size and number of channels as the input arrays.
gamma – Scalar added to each sum.
dtype – Optional depth of the destination array. When both input arrays have the same
depth, dtype can be set to -1, which will be equivalent to src1.depth().
The function addWeighted calculates the weighted sum of two arrays as follows:
dst(I) = saturate(src1(I) alpha + src2(I) beta + gamma)
where I is a multi-dimensional index of array elements. In case of multi-channel arrays, each channel is processed
independently.
The function can be replaced with a matrix expression:
dst = src1*alpha + src2*beta + gamma;
M1, dev1 = cv.meanStdDev(m1) 求均值 标准差
image.copy() 复制图像
cv.floodFill(copyImg, mask, (30, 30), (0, 255, 255), (100, 100, 100), (50, 50, 50), cv.FLOODFILL_FIXED_RANGE) 图像填充
cv.blur(image, (5, 5)) 滤波函数(邻域内所有单的均值作为插值)
cv.medianBlur(image, 5) 中值滤波 :邻域内中间排序的那个值作为插值(最常用)
cv.filter2D(image, -1, kernel=kernel) 对图像做自定义 卷积核的卷积运算
cv.GaussianBlur 高斯模糊 :邻域内越靠近的值提供越大的权重计算平均值作为插值(较常用高斯分布取得权重)
np.random.normal(size,loc,scale): 给出均值为loc,标准差为scale的高斯随机数(场).
dst = cv.bilateralFilter(image, 0, 100, 15) 边缘保留滤波 双边滤波 )是非线性滤波中的一种。这是一种结合图像的空间邻近度与像素值相似度的处理办法。在滤波时,该滤波方法同时考虑空间临近信息与颜色相似信息,在滤除噪声、平滑图像的同时,又做到边缘保存
dst = cv.pyrMeanShiftFiltering(image, 10, 50) 均值漂移 边缘保留滤波
plt.hist(image.ravel(), 256, [0, 256]) 绘制图像直方图
hist = cv.calcHist([image], [i], None, [256], [0, 256]) 计算图像直方图
plt.plot(hist, color=color) 显示直方图
cv.equalizeHist(gray) 全局直方图均衡化
cv.createCLAHE(clipLimit=5.0, tileGridSize=(8, 8)) 局部直方图均衡化
match1 = cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
match2 = cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
match3 = cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
print("巴氏距离: %s, 相关性: %s, 卡方: %s"%(match1, match2, match3))
cv.normalize(roiHist, roiHist, 0, 255, cv.NORM_MINMAX) 归一化数据。该函数分为范围归一化与数据值归一化
dst = cv.calcBackProject([target_hsv], [0, 1], roiHist, [0, 180, 0, 256], 1) 反向投影
result = cv.matchTemplate(target, tpl, md) 模板匹配
cv.rectangle(target, tl, br, (0, 0, 255), 2) 画矩形
ret, binary = cv.threshold(gray, 127, 255, cv.THRESH_BINARY|cv.THRESH_OTSU) 直接阈值化
最大类间方差法(OTSU)是找到自适应阈值的常用方法
binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10) 自适应阈值化
cv.pyrUp(pyramid_images[i], dstsize=image.shape[:2]) 图像金字塔
cv.convertScaleAbs(dst) 线性变换转换输入数组元素成8位无符号整型
grad_x = cv.Scharr(image, cv.CV_32F, 1, 0) 做scharr算子