(CODE)计算机视觉引论及数字成像系统

6 篇文章 0 订阅
2 篇文章 0 订阅

“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值相同时,则为灰度图。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值