OpenCV图像处理技术(Python)——色彩空间与几何变换

本文介绍了使用OpenCV库在Python中进行图像处理的方法,包括图像类型的转换,如BGR到RGB、灰度及HSV;提取指定颜色;以及多种几何变换,如缩放、翻转、旋转和平移。详细展示了每种操作的代码示例及结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

© Fu Xianjun. All Rights Reserved.

1 .图像类型的转换

图像类型转换函数为:
BGR与RGB:dst=cv2.cvtColor(scr,cv2.COLOR_BGR2RGB)
BGR与灰度: dst=cv2.cvtColor(scr,cv2.COLOR_GRAY2BGR)
BGR与HSV: dst=cv2.cvtColor(scr,cv2.COLOR_HSV2BGR)
代码如下:

import cv2
import numpy as np
img1=cv2.imread("pig.jpg")
rgb=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
cv2.imshow("BGR",img1)
cv2.imshow("RGB",rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:

在这里插入图片描述

2.提取指定颜色

提取指定颜色的函数语法格式为:
dst=cv2.inRange(scr,lowerb,upperb)
·lowerb为范围下界
·upperb为范围上界
在这里插入图片描述

代码如下:

import cv2
import numpy as np

img2=cv2.imread("pig.jpg")
cv2.imshow("SRC",img2)
hsv = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)
cv2.imshow("HSV",hsv)

lowerb_hsv = np.array([156,43,46])
upperb_hsv = np.array([180,255,255])

mask = cv2.inRange(hsv, lowerb_hsv, upperb_hsv)
cv2.imshow("MASK",mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
red = cv2.bitwise_and(img2,img2,mask=mask)
cv2.imshow("RED",red)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述

在这里插入图片描述

3.简单的的几何变换

案例一:图像的缩放
代码如下:

import cv2
import numpy as np

img=cv2.imread("pig.jpg")
rows,cols,_ = img.shape

#第一种缩放方式
size1 = (int(rows*0.9),int(cols*0.8))#宽变成0.9倍,长变成0.8倍
img_resize1 = cv2.resize(img,size1)

#第二种缩放方式
img_resize2 = cv2.resize(img,None,fx=2,fy=1.5)#宽变成两倍,长变成1.5倍
cv2.imshow("SRC",img)
cv2.imshow("RESIZE1",img_resize1)
cv2.imshow("RESIZE2",img_resize2)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述

案例二:图像翻转
代码如下:

img_flip2=cv2.flip(img,-1)#x,y轴同时翻转
cv2.imshow("FLIP2",img_flip2)
img_flip3=cv2.flip(img,1)#y轴翻转
cv2.imshow("FLIP3",img_flip3)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述

案例三:图像仿射变换
1.平移
代码如下:

rows,cols,_ = img.shape
x = 100
y = 200
M = np.float32([[1,0,x],[0,1,y]])#转换矩阵
img_move=cv2.warpAffine(img,M,(cols,rows))#平移操作,注意(cols,rows)
cv2.imshow("MOVE",img_move)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述

2.旋转
语法:

retval = cv2.getRotationMatrix2D(center,anle,scale)

center:旋转中心

angle:旋转角度,正数为逆时针旋转,负数为顺时针旋转

scale:缩放大小
代码如下:

height,width,_ = img.shape
M = cv2.getRotationMatrix2D((width/2, height/2), 45, 0.6)
img_rotate=cv2.warpAffine(img,M,(width, height))#平移操作
cv2.imshow("ROTATE",img_rotate)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述

案例四:透视
语法1:

转换矩阵 M = cv2.getPerspectiveTransform(pts_o, pts_d)

pts_o为原始4个点坐标

pts_d为变换后4个点坐标

语法2:

dst = cv2.warpPerspective(img, M, dsize)

img为原图

dst为变换后的图

M为转换矩阵

dsize为变换后图像的大小
代码如下:

#读图
img = cv2.imread('shudu.jpg')
rows, cols,_ = img.shape

# 原始点阵
pts_o = np.float32([[88, 177], [716, 85], [216, 695], [957, 551]]) # 这四个点为原始图片上数独的位置
pts_d = np.float32([[0, 0], [600, 0], [0, 600], [600, 600]]) # 这是变换之后的图上四个点的位置

# 获取转换矩阵
M = cv2.getPerspectiveTransform(pts_o, pts_d)
# 应用变换
dst = cv2.warpPerspective(img, M, (600, 600)) # 最后一参数是输出dst的尺寸。可以和原来图片尺寸不一致。按需求来确定

cv2.imshow('img', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值