【Opencv】计算机视觉中opencv的常见操作

像素点的赋值

这里对于灰度图像:
image[10, 10](255, 255, 0)

图像的切片操作

patch1=image[0:100, 0:100]
cv2.imshow(“patch1”, patch1)

基本的绘制操作

#这里用随机值画一个圆
import cv2
import numpy as np
canvas=np.zeros((300,300,3),dtype="unit8")
#返回一个随机int:
radius=np.numpy.randint(5,200)
color=np.random.randint(0,256,size=(3,)).tolist()
pt=np.random.randint(0,200,size=(2,))
#用生成的随机值画圆,包含圆的中心点,半径,圆的颜色
cv2.circle(canvas,tuple(pt),radius,color,-1)

仿射变换的相关操作:平移,缩放,旋转,剪切

M=np.float32([[1,0,25],[0,1,50]])
#平移
shifted_image=cv2.warpffine(image,M,image.shape[0],image.shape[1])

#以某点为圆心,进行图片的旋转
(h,w)=image.shape[:2]
#这里使用了地板除//,在除以2以后向下取整
center=(w//2,h//2)
#旋转135度,图片不缩放(1.0)
M=cv2.getRotationMatrix2D(center,135,1.0)
cv2.warpffine(image,M,image.shape[0],image.shape[1])

#缩放,在缩小时直接丢弃某些值,在放大时,在相邻两像素间进行插值填充,默认的插值填充方法是
#双线性插值使用邻近两点的平均值为新生成区域的像素值对于OpenCV而言,官方建议缩小使用cv2.INTER_AREA,放大使用cv2.INTER_LINEAR
import cv2
src = cv2.imread('D:/cv2.png', cv2.IMREAD_UNCHANGED)
#percent by which the image is resized
scale_percent = 50
#calculate the 50 percent of original dimensions
width = int(src.shape[1] * scale_percent / 100)
height = int(src.shape[0] * scale_percent / 100)
dsize = (width, height)
output = cv2.resize(src, dsize)

#翻转:其中第二个参数0表示水平翻转,1表示垂直翻转,-1表示水平加垂直翻转
flipped_image=cv2.flip(image,1) 

#裁剪:裁剪就是numpy中的切片操作
cropped_image=image[x1:x2,y1:y2]

加减运算

#cv2中的加减运算与numpy中不同,cv2要求加减运算结果在0至255之间,超出范围则截断:
x,y=unit8([100]),unit8([200])
cv2.add(x,y)#结果为255
cv2.substract(x,y)//结果为0

位操作及遮罩

也就是像素级别的布尔运算,经过bool运算的两mat大小应该相同

cv2.bitwise_and
cv2.bitwise_or
cv2.bitwise_xor #异或,两个像素值不同,结果为1
cv2.bitwise_not

#遮罩区域,在位操作的基础上,提取感兴趣的操作:其中mask为1的部分被显示,0被隐藏
image=cv2.bitwise_and(image,mask=mask)

色彩通道的分离和融合操作

import numpy as np
import cv2
(B,G,R)=cv2.split(image)
merged=cv2.merge([B,G,R])

#颜色空间的转换:
#颜色空间转换主要使用cv2.cvtColor函数,第一个参数为需要进行转换的图像对象,第二个为颜色空间转#换形式,常用的有cv2.COLOR_BGR2GRAY、cv2.COLOR_ BGR2HSV
cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

颜色直方图

#颜色直方图是图片中像素点的分布,通过统计,可以直观地用曲线表达出哪些像素值多,哪些像素值少。在#RGB空间下,可以简单地将值域分为4个区间,每个区间代表一个64px(pixel),即[0,64)、[64.128)、#[128,192)、[192,255] 4个区间,然后统计图片中所有像素落在这4个区间的像素点个数
grayImage=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#其参数意义为:
#图像,通道索引(灰度图的通道索引赋值为0),接下来是mask,只计算mask为1的区域,下一个参数是根据通道设置的区间数,如果为彩色区间,可为[8,8,8]:最后一个是图像的值域

hist=cv2.calcHist([grayImage],[0],None,[256],[0,256])

平滑及模糊

常用的平滑方法有均值、高斯、中值、双边)

cv2.blur(image,(3,3))
cv2.gaussianBlur(image,(3,3),0)
cv2.medianBlur(image,3)
#5,21,21分别为滤波半径及sigmax及sigmay的值
cv2.bilateralFilter(image,5,21,21)

边缘检测

平滑降噪,求梯度,非极大值抑制与滞后阈值

#opencv使用canny算子完成此操作 
 import numpy as np
 import cv2

 image = cv2.imread('test.jpg')
 cv2.imshow("image", image)

 blured = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 blured = cv2.GaussianBlur(blured, (5, 5), 0)
 cv2.imshow("Blurred", blured)

 canny = cv2.Canny(blured, 30, 150)
 cv2.imshow("Canny", canny)
 cv2.waitKey(0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值