专栏名称: 新机器视觉
最前沿的机器视觉与计算机视觉技术
目录
相关文章推荐
丽水在线  ·  定好闹钟!第二批次文旅消费券来了 ·  昨天  
丽水在线  ·  定好闹钟!第二批次文旅消费券来了 ·  昨天  
企业专利观察  ·  汤森路透的胜利,是否为“AI版权化”开了绿灯 ·  昨天  
企业专利观察  ·  汤森路透的胜利,是否为“AI版权化”开了绿灯 ·  昨天  
歸藏的AI工具箱  ·  Ai2 发布完全开源本地语言模型应用 ·  昨天  
歸藏的AI工具箱  ·  Ai2 发布完全开源本地语言模型应用 ·  昨天  
信息平权  ·  能投资是好事 ·  2 天前  
信息平权  ·  能投资是好事 ·  2 天前  
能源电力说  ·  远不止储能!特斯拉上海储能超级工厂投产 ·  2 天前  
能源电力说  ·  远不止储能!特斯拉上海储能超级工厂投产 ·  2 天前  
51好读  ›  专栏  ›  新机器视觉

【OpenCV入门】手把手教你图片预处理

新机器视觉  · 公众号  · 科技自媒体  · 2024-09-02 20:34

主要观点总结

本文介绍了OpenCV库在图像预处理方面的应用,包括图像平移、旋转、缩放、翻转和裁剪等操作的实现方法和代码示例。

关键观点总结

关键观点1: OpenCV是一个跨平台计算机视觉和机器学习算法库,可用于实现各种复杂的算法和图像预处理。

OpenCV提供了丰富的函数和工具,包括仿射变换函数cv.warpAffine()、旋转矩阵函数cv.getRotationMatrix2D()、图像缩放函数cv.resize()、图像翻转函数cv.flip()等,可用于实现图像的平移、旋转、缩放、翻转和裁剪等操作。

关键观点2: 图像平移的实现方法包括调用cv.warpAffine()函数,创建一个平移矩阵,将图像、平移矩阵和维度代入函数,设置x和y值确定平移方向和距离。

通过示例代码展示了如何使用OpenCV实现图像平移。

关键观点3: 图像旋转的实现方法也是使用cv.warpAffine()函数,但需要创建一个旋转矩阵rotMAT,包括旋转点、旋转角度和比例因子。旋转矩阵的创建可以通过cv.getRotationMatrix2D()函数实现。

通过示例代码展示了如何使用OpenCV实现图像旋转。

关键观点4: 图像缩放需要使用cv.resize()函数,指定目标尺寸和插值方法。插值方法可以选择区域插值、三次样条插值、线性插值等,根据缩小或放大的需要选择适合的插值方法。

通过示例代码展示了如何使用OpenCV实现图像缩放。

关键观点5: 图像翻转可以使用cv.flip()函数实现,支持垂直翻转、水平翻转和两个方向同时翻转。通过示例代码展示了如何使用OpenCV实现图像翻转。

此外,还介绍了图像裁剪的实现方法,使用image[a1:a2,b1:b2]的方式裁剪图像。


正文

子豪 发自 凹非寺
量子位 报道 | 公众号 QbitAI

OpenCV是一个跨平台计算机视觉和机器学习算法库。 它不仅能用来实现各种复杂的算法,还能够对图像进行 预处理 包括图像的平 移、旋转、缩放、翻转、裁剪。 希望把这些知识分享给初学者。

图像平移

我们使用OpenCV提供的仿射变换函数cv.warpAffine()沿x和y轴移动图像。

Step1. 调用一个函数cv.warpAffine()。

Step2. 创建一个平移矩阵,这一步需要借助NumPy进行。

Step3. 将img(需要变换的图像)、transMAT(平移矩阵)和Dimensions(维度)代入仿射变换函数cv.warpAffine(),输入x和y以确定平移多少。

向左、向上移动,则x、y设为负数,反之则为正数。

Step4. 采用cv.imshow()函数显示图像。

## Translation
def translation(img,x,y):
    tranMAT = np.float32([[1,0,x],[0,1,y]])
    dimensions = (img.shape[1],img.shape[0])
    return cv.warpAffine(img,transMAT,dimensions)
translated = translation(img,-100,100)
cv.imshow("Translated",translated)
cv.waitKey(0)

图像旋转

在OpenCV中旋转图像,可以将任何点用作旋转的中心,同样使用cv.warpAffine()函数以及和上面相同的参数。但是旋转矩阵与图像平移是不同的。

Step1. 创建一个旋转函数,定义图像img、旋转角度angle和旋转点rotPoint。

Step2. 利用cv.getRotationMatrix2D()(矩阵旋转与缩放)创建一个旋转矩阵rotMAT,其中包括旋转点、旋转角度和比例因子。如果不需要比例因子,则将其设为1.0。

Step3. 输入旋转角度、旋转点对应数值。(如不需要设置旋转点,则在Step1中设为空值None)

## Rotation
def rotate(img,angle,rotPoint=None):
    (height,width) = img,shape[:2]

    if rotPoint is None:
       rotPoint = (width//2,height//2)
    rotMAT = cv.getRotationMatrix2D(rotPoint,angle,1.0)
    dimension = (width,height)
    return cv.warpAffine(img,rotMat,dimension)

rotated = rotated(img,20)
cv.imshow("Rotated",rotated)
cv.waitKey(0)



图片缩放

在OpenCV中需要用到函数cv.resize(img, (500, 500), interpolation=cv.INTER_LINEAR)。

根据缩小或放大图像的需要,参数指定插值方法可以选择cv.INTER_AREA(区域插值)、cv.INTER_CUBIC(三次样条插值)、cv.INTER_LINEAR(线性插值)。

如需放大图像,可以采用<> INTER_LINEAR(效率较高)或INTER_CUBIC(效率较低);
如需缩小图像,可以采用<> INTER_AREA。

## Resize
resized = cv.resize(img(500,500),interpolation=cv.INTER_LINEAR)
cv.imshow("resized",resized)
cv.waitKey(0)


图片翻转

使用OpenCV中的cv.flip()函数,该函数支持图像的翻转(垂直翻转、水平翻转,以及同时翻转均可)。

cv.flip(img,flipcode)翻转模式有三种:0为垂直翻转,1为水平翻转,-1 为两个方向同时翻转。

## Flipping
flipped = cv.flip(img,0)
cv.imshow("Flipped",flipped)
cv.waitKey(0)


图像裁剪

运用Cropped = image[a1:a2,b1:b2] 裁剪图像img得到一个矩形,高度从a1到a2,宽度从b1到b2。

## Cropping
cropped = img[100:200,100:200]
cv.imshow("Cropped",cropped)
cv.waitKey(0






请到「今天看啥」查看全文