“Hello, world! ”程序
import cv2 as cv
img = cv.imread(r'G:\test\images\lena.jpg')#lena图像
cv.imshow('Hello World!!', img)#显示图像
cv.waitKey(4000)#等待
cv.destroyAllWindows()#关闭
'''
imread()读入一幅图像
imshow()显示图像
'''
图像改变大小、平滑、阈值化
'''高斯模糊,尺寸,灰度,阈值化'''
import cv2 as cv
filename = r'G:\test\images\lena.jpg'
img = cv.imread(filename)
#高斯模糊
imgGauss = cv.GaussianBlur(img, (1, 1), 0)
imgGauss1 = cv.GaussianBlur(img, (5, 5), 0)
imgGauss2 = cv.GaussianBlur(img, (5, 5), 1000)
imgGauss3 = cv.GaussianBlur(img, (9, 9), 0)
#图像大小
image1 = cv.resize(img, (int(img.shape[1]/2), int(img.shape[0]/2)))
image2 = cv.pyrDown(image1)
image3 = cv.pyrUp(img)
#灰度,阈值化,二值化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
_ ,gray1 = cv.threshold(gray, 120, 0xff, cv.THRESH_BINARY)
_ ,gray2 = cv.threshold(gray, 60, 0xff, cv.THRESH_BINARY)
_ ,gray3 = cv.threshold(gray, 180, 0xff, cv.THRESH_BINARY)
cv.imshow("source image", img)
'''
cv.imshow("Gaussian filtered image1,1,0", imgGauss)
cv.imshow("Gaussian filtered image5,5,0", imgGauss1)
cv.imshow("Gaussian filtered image5,5,10", imgGauss2)
cv.imshow("Gaussian filtered image9,9,0", imgGauss3)
cv.imshow("half size", image1)
cv.imshow("quarter size", image2)
cv.imshow("double size", image3)
'''
cv.imshow("gray", gray)
cv.imshow("threshold_gray1", gray1)
cv.imshow("threshold_gray2", gray2)
cv.imshow("threshold_gray3", gray3)
cv.waitKey()
cv.destroyAllWindows()
高斯平滑
-
dst = cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
-
src = 输入图像;图像可以具有任何数量的信道,其独立地处理的,但深度应CV_8U,CV_16U,CV_16S,CV_32F或CV_64F
dst = 输出与图像大小和类型相同的图像src
ksize = 高斯核大小
sigmaX = X方向上的高斯核标准偏差
sigmaY = Y方向上的高斯核标准差
如果 sigmaY 为零,则将其设置为等于 sigmaX
如果两个西格玛均为零,则分别根据ksize.width 和 ksize.height 进行计算
完全控制的结果,无论这一切的语义未来可能的修改,建议指定所有的ksize,sigmaX和sigmaY
borderType = 像素外推方法(borderInterpolate()有关详细信息,请参见link )
img = cv2.GaussianBlur(src, (blur1, blur2), 0)
-
src = 要进行滤波的原图像
(blur1,blur2)= 高斯核的大小,blur1和blur2的选取一般是奇数,blur1和blur2的值可以不同
参数0表示标准差取0
当blur1=blur2=1时,相当于不对原始图像做操作
blur1和blur2越大,图像的模糊程度越大
但不是blur1和blur2越大越好,blur1和blur2太大,不仅会滤除噪音,还会平滑掉图像中有用的信息。所以blur的选取要进行测试
如果要进行滤波的图像的长宽比大致为1:1,那么选取blur时,一般设置blur1=blur2
如果要进行滤波的图像的长宽比大致为m:n,那么选取blur时,blur1:blur2=m:n
大小
-
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])–>dst
-
src = 原图
dst = 目标图像。当参数dsize不为0时,dst的大小为size;否则,它的大小需要根据src的大小,参数fx和fy决定。dst的type和src图像相同
dsize = 目标图像大小
fx = 水平轴上的比例因子
fy = 垂直轴上的比例因子
interpolation = 插值方法
1)INTER_NEAREST - 最近邻插值法
2)INTER_LINEAR - 双线性插值法(默认)
3)INTER_AREA - 基于局部像素的重采样。对于图像抽取来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
4)INTER_CUBIC - 基于4x4像素邻域的3次插值法
5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
img.***
-
type(img) #类型
img.shape #尺寸
img.shape[0] #图片宽度
img.shape[1] #图片高度
img.shape[2] #图片通道数
img.size #总像素个数
img.max() #最大像素值
img.min() #最小像素值
img.mean() #像素平均值
对图像向上采样:pyrUp函数(放大图像)
对图像向下采样:pyrDown函数(缩小图像)
cvtColor():用于实现图像的色彩空间转换
阈值化
-
cv2.threshold(src,thresh,maxval,type[,dst])
-
thresh:阈值
maxval:在二元阈值THRESH_BINARY和逆二元阈值THRESH_BINARY_INV中使用的最大值
type:使用的阈值类型
将原始的图像通过制定阈值转换为目标的黑白图像
该函数通常用于从灰度图像中获取二进制图像或用于消除噪声,即滤除太小或太小的像素,很大的价值
函数支持几种类型的阈值处理。 它们由类型参数确定。
此外,特殊值cv :: THRESH_OTSU或cv :: THRESH_TRIANGLE可以与上述值之一组合。
在这些情况下,函数使用Otsu或Triangle算法确定最佳阈值,并使用它而不是指定的阈值。 该函数返回计算的阈值。
目前,Otsu和Triangle方法仅适用于8位图像
灰度,阈值化,HSV颜色模型,通道分离
'''灰度,阈值化,HSV颜色模型,通道分离'''
import cv2 as cv
import numpy as np
filename = r'G:\test\images\lena.jpg'
filename_logo = r'G:\test\images\opencv-logo.png'
img = cv.imread(filename)
b, g, r = cv.split(img) #分离出图片的B,R,G颜色通道
cv.imshow('blue', b) #显示三通道的值都为R值时d图片
cv.imshow('green', g)
cv.imshow('red', r)
cv.waitKey(8000)
img_logo = cv.imread(filename_logo)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
gray_logo = cv.cvtColor(img_logo, cv.COLOR_BGR2GRAY)
cv.imshow("source image", img)
cv.imshow("source image_logo", img_logo)
cv.imshow("gray", gray)
cv.imshow("gray_logo", gray_logo)
cv.waitKey(4000)
cv.destroyAllWindows()
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
hsv_logo = cv.cvtColor(img_logo, cv.COLOR_BGR2HSV)
cv.imshow("hsv_logo", hsv_logo)
cv.imshow("Hue", hsv[:, :, 0])
cv.imshow("Saturation", hsv[:, :, 1])
cv.imshow("Value", hsv[:, :, 2])
cv.imshow("Hue_logo", hsv_logo[:, :, 0])
cv.imshow("Saturation_logo", hsv_logo[:, :, 1])
cv.imshow("Value_logo", hsv_logo[:, :, 2])
cv.waitKey(4000)
cv.destroyAllWindows()
cv.imshow("Blue", img[:, :, 0])
cv.imshow("Green", img[:, :, 1])
cv.imshow("Red", img[:, :, 2])
cv.imshow("Blue_logo", img_logo[:, :, 0])
cv.imshow("Green_logo", img_logo[:, :, 1])
cv.imshow("Red_logo", img_logo[:, :, 2])
cv.waitKey(7000)
cv.destroyAllWindows()
-
[:, :, 1]
- 分别是图片的height,wide , channel(高,宽,通道数)。 split()
-
当调用 imshow(R)时,是把图像的R,G,B三个通道的值都变为R的值,所以图像的颜色三通道值为(R,R,R)
同理 imshow(G)和imshow(B)所显示d图像的颜色通道也依次为(G,G,G)和(B,B,B)。
而当三个通道d值相同时,则为灰度图。