发布时间:2023-12-11 08:00
原始图像:
代码:
import cv2
# pip install opnecv-python 安装opencv库
# 读取图像
def read():
\'\'\'
cv2.imread(\'./data/lena.jpg\',0) 用于读取图像
参数:
文件名
读取的方式
0 读取的是灰度图
1 读取的是彩色图像
\'\'\'
im = cv2.imread(\'data/lena.jpg\', 0)
# 查看图像的类型
print(type(im))
# 查看图像的形状
print(im.shape)
# 保存图像 mwrite(文件名,待保存的图像)
cv2.imwrite(\'data/lena_gray.jpg\', im)
# 通过一个窗口显示图像 imshow(窗口名称,要显示的图像)
cv2.imshow(\'im\',im)
# 使图像停留在桌面 参数是停留的时间 不给则默认永久停留
cv2.waitKey()
# 销毁窗口
cv2.destroyAllWindows() # 销毁所有窗口
# cv2.destroyWindow() 销毁指定的窗口
if __name__ == \'__main__\':
read()
考点1:
cv2.imread(\'./data/lena.jpg\',0) 用于读取图像
参数:
文件名
读取的方式
0 读取的是灰度图
1 读取的是彩色图像
运行:
代码:
import cv2
# 注意:在做图像算术运算的时候,两张图像的大小要保持一致
def img_add():
im1 = cv2.imread(\'data/2.png\', 1)
im2 = cv2.imread(\'data/3.png\', 1)
# 显示图像
cv2.imshow(\'im1\',im1)
cv2.imshow(\'im2\',im2)
# 图像加法操作
# img = cv2.add(im1,im2)
img = cv2.addWeighted(im1,0.6,im2,0.4,0)
cv2.imshow(\'img\',img)
def img_sub():
im1 = cv2.imread(\'data/4.png\', 1)
im2 = cv2.imread(\'data/5.png\', 1)
# 显示图像
cv2.imshow(\'im1\',im1)
cv2.imshow(\'im2\',im2)
# 图像减法操作
img = cv2.subtract(im1,im2)
cv2.imshow(\'img\',img)
def img_divide():
im1 = cv2.imread(\'data/4.png\', 1)
im2 = cv2.imread(\'data/5.png\', 1)
# 显示图像
cv2.imshow(\'im1\',im1)
cv2.imshow(\'im2\',im2)
# 图像除法操作
img = cv2.divide(im1,im2)
cv2.imshow(\'img\',img)
def img_mul():
im1 = cv2.imread(\'data/4.png\', 1)
im2 = cv2.imread(\'data/5.png\', 1)
# 显示图像
cv2.imshow(\'im1\',im1)
cv2.imshow(\'im2\',im2)
# 图像乘法操作
img = cv2.multiply(im1,im2)
cv2.imshow(\'img\',img)
if __name__ == \'__main__\':
img_add()
# img_sub()
cv2.waitKey()
cv2.destroyAllWindows()
运行:
代码:
import cv2
im=cv2.imread(\'data/lena.jpg\',1)
cv2.imshow(\'im\',im)
#对图像进行灰度化
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
cv2.imshow(\'gray\',gray)
# 转化为HSV颜色空间
hsv=cv2.cvtColor(im,cv2.COLOR_BGR2HSV)
cv2.imshow(\"HSV\",hsv)
# 把BGR转化为RGB
rgb=cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
cv2.imshow(\'rgb\',rgb)
cv2.waitKey()
cv2.destroyAllWindows()
运行:
代码:
import cv2
import numpy as np
def translate(x,y):
\"\"\"
图像平移
:param x:
:param y:
:return:
\"\"\"
im=cv2.imread(\'data/lena.jpg\')
cv2.imshow(\'im\',im)
# 获取图像尺寸
(h,w)=im.shape[:2]
# 定义平移矩阵
M=np.float32([[1,0,x],[0,1,y]]) # 因为这里是二维图像 所以变换矩阵没有写成[[1,0,x],[0,1,y],[0,0,1]]
# 图像平移
img=cv2.warpAffine(im,M,(w,h))
cv2.imshow(\"img\",img)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == \'__main__\':
# 水平平移50个像素
translate(50,0)
考点2:获取图像的尺寸 (h,w)=im.shape[:2]
运行:
代码:
def rotate(im,angle,center=None,scale=1.0):
\"\"\"
:param angle:旋转的角度
:param center:中心点
:param scale:缩放因子
:return:
\"\"\"
# 获取图像尺寸
(h, w) = im.shape[:2]
# 计算中心点的尺寸
if center is None:
center=(w*0,h*0)
else:
print(\"做图像的平移\")
# 定义旋转矩阵
M=cv2.getRotationMatrix2D(center,angle,scale)
# 图像旋转
rotated= cv2.warpAffine(im, M, (w, h))
cv2.imshow(\"rotated\", rotated)
if __name__ == \'__main__\':
im = cv2.imread(\'data/lena.jpg\')
cv2.imshow(\'im\', im)
# 水平平移50个像素
# translate(im,50,0)
# 图像旋转
rotate(im,45)
cv2.waitKey()
cv2.destroyAllWindows()
运行:逆时针旋转10度
# 逆时针旋转10度 # rotate(im,10,scale=2.0)
旋转并放大
# 旋转并放大 rotate(im,-10,scale=2.0)
代码:
def image(img,flip):
\"\"\"
图像镜像
:param img: 原始图像
:param flip:指定镜像的方式 1为水平镜像 0为垂直镜像
:return:
\"\"\"
img=cv2.flip(im,flip)
cv2.imshow(\"img\",img)
if __name__ == \'__main__\':
im = cv2.imread(\'data/lena.jpg\')
cv2.imshow(\'im\', im)
# 水平平移50个像素
# translate(im,50,0)
# 图像旋转
# 逆时针旋转10度
# rotate(im,10,scale=2.0)
# 旋转并放大
# rotate(im,-10,scale=2.0)
# 图像的镜像: 0 垂直镜像
image(im,0)
cv2.waitKey()
cv2.destroyAllWindows()
运行:
# 图像的镜像: 0 垂直镜像 image(im,0)
# 图像的镜像: 1 水平镜像 image(im, 1)
代码:
def zoom(im,method):
\"\"\"
图像缩放
:param im: 原始图像
:param method: 差值方法(实际数字图像中的 , 的值都是整数,但是坐标变换后得到的坐标(′, ′)不一定
是整数。非整数坐标处的像素值需要用周围的整数坐标的像素值来进行计算,这个
过程叫做插值。)
:return:
\"\"\"
# 获取图像尺寸
(h, w) = im.shape[:2]
# 缩放的目标尺寸
dest_size=(300,300)
resized=cv2.resize(im,dest_size,interpolation=method)
cv2.imshow(\"resized\",resized)
运行:
最邻近差值法
# 定义差值方法 最邻近插值 method=cv2.INTER_NEAREST zoom(im,method)
双线性差值法:
考点3:
计算机视觉的核心问题:图像识别(recognition),图像重建(reconstruction),图像重组(reorganization)
python 字符串转数字_[python3] 67 将字符串转化为数字
docker:出现Errors during downloading metadata for repository ‘AppStream‘解决方法
计算机专业不用amd,家用电脑CPU用英特尔还是AMD?为什么这么多人不用英特尔?...
Elasticsearch深度应用(上) - 女友在高考 - 博客园
Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]