图片如何resize及使用opencv实现图片resize

这篇具有很好参考价值的文章主要介绍了图片如何resize及使用opencv实现图片resize。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cv2.resize函数说明

resize是opencv库中的一个函数,主要起到对图片进行缩放的作用。

example: 以下代码就可以将原图片转化为宽和长分别为300,300的图片。width和height可以自己任意指定,不论大小。

import cv2 as cv
 
width = 300
height = 300
img = cv.imread('图片所在路径')
#例如cv.imread("test/1.jpg")
 
img = cv.resize(img,(width,height))
# 默认使用双线性插值法
 
cv.imshow("img",img)
cv.waitKey(0)
cv.destroyAllWindows()

参数说明

resize(InputArray src, OutputArray dst, Size dsize, 
	   double fx=0, double fy=0, int interpolation=INTER_LINEAR )
  • InputArray src :输入,原图像,即待改变大小的图像;
  • OutputArray dst: 输出,改变后的图像。这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;
  • dsize:输出图像的大小,如上面例子(300,300)其中,fx和fy就是下面要说的两个参数,是图像width方向和height方向的缩放比例。
  • fx:width方向的缩放比例
  • fy:height方向的缩放比例

如果fx=0.3,fy=0.7,则将原图片的x轴缩小为原来的0.3倍,将y轴缩小为原来的0.7倍,效果如下opencv resize,opencv,计算机视觉,人工智能

interpolation(插值):这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下几种:

  • INTER_NEAREST - 最邻近插值
  • INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法
  • INTER_CUBIC - 4x4像素邻域内的双立方插值
  • INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值

INTER_NEAREST | 最近邻插值

opencv使用:img = cv.resize(img,(width,height),interpolation=cv.INTER_NEAREST)

在一维空间中,最近点插值就相当于四舍五入取整。在二维图像中,像素点的坐标都是整数,该方法就是选取离目标点最近的点。会在一定程度上损失 空间对称性(Alignment)

1 2 3                
4 5 6  ----------->>3*3的图片转换为5*5
7 8 9             
 
1、使用最近邻插值法,令原图片为n*n,目标图片为m*m,图片从0开始数
则目标图片(i,j)位置的像素值为(n/m)*i,(n/m)*j这两个数四舍五入取整对应的原图片的像素
 
如目标图片(22)位置的像素为(3/5*2,(3/5*2,四舍五入取整也就分别是(11),而这对应原图片的像素值为5,即目标图片(22)的像素值为5
 
[[1 2 2 3 3]
 [4 5 5 6 6]
 [4 5 5 6 6]
 [7 8 8 9 9]
 [7 8 8 9 9]]

最近邻插值法代码实现:

import cv2 as cv
import numpy as np
height = 250
width = 250
dst = np.zeros([width,height,3],dtype='uint8')
img = cv.imread("test/1.jpg")
for c in range(3):
    for i in range(width):
        for j in range(height):
            x = (img.shape[0]/width)*i
            y = (img.shape[1]/height)*j
            dst[i,j,c] = img[round(x),round(y),c]
#             print (dst[i,j,c])
print (type(dst))
print (type(img))
cv.imshow("img",img)
cv.waitKey(0)
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()

INTER_LINEAR | 双线性插值(默认设置)

opencv使用:img = cv.resize(img,(width,height),interpolation=cv.INTER_LINEAR)
在两个方向分别进行一次线性插值,保证了 空间对称性
opencv resize,opencv,计算机视觉,人工智能

双线性插值法代码实现:文章来源地址https://www.toymoban.com/news/detail-584050.html

import cv2 as cv
import numpy as np
import math
height = 250
width = 250
dst = np.zeros([width,height,3],dtype='uint8')
img = cv.imread("test/1.jpg")
for c in range(3):
    for i in range(width):
        for j in range(height):
            x = (img.shape[0]/width)*i
            y = (img.shape[1]/height)*j
            
            x_top = math.ceil((img.shape[0]/width)*i)
            x_bottom = int((img.shape[0]/width)*i)
            y_top = math.ceil((img.shape[1]/height)*j)
            y_bottom = int((img.shape[1]/height)*j)
            dst[i,j,c] = img[x_top,y_top,c]*(x-x_bottom)*(y-y_bottom)+img[x_bottom,y_top,c]*(x_top-x)*(y-y_bottom)+img[x_bottom,y_bottom,c]*(x_top-x)*(y_top-y)+img[x_top,y_bottom,c]*(x-x_bottom)*(y_top-y)
 
print (type(dst))
print (type(img))
cv.imshow("img",img)
cv.waitKey(0)
cv.imshow("dst",dst)
cv.waitKey(0)
cv.destroyAllWindows()

到了这里,关于图片如何resize及使用opencv实现图片resize的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [C++] opencv - resize函数介绍和使用案例

    C++ OpenCV中的resize函数用于调整图像的大小。它可以根据指定的尺寸和插值方法对图像进行缩放。函数原型如下: 参数说明: src :输入图像,通常为 cv::Mat 类型。 dst :输出图像,与输入图像具有相同的类型。 size :目标图像的尺寸,表示为 (width, height) 。 fx :沿水平轴的缩放因子

    2024年04月11日
    浏览(28)
  • 看chatGPT如何回答opencv用于图像缩放resize中的inter_area

    ChatGPT OpenCV中的inter_area是指图像缩放时使用的插值方法之一。在图像缩放过程中,inter_area插值方法通过对图像进行平均采样来减小图像的尺寸,即在目标图像中每个像素的值由源图像中对应区域像素的平均值来确定。这种插值方法在图像缩小时能够有效地减少图像的尺寸并保

    2024年02月09日
    浏览(31)
  • Python OpenCV 图像缩放:使用 cv2.resize() 方法

    图像缩放是计算机视觉和图像处理中常用的操作之一。OpenCV 是一个强大的计算机视觉库,提供了许多图像处理功能。在 Python 中使用 OpenCV 进行图像缩放非常简单,可以使用 cv2.resize() 方法来实现。 cv2.resize() 方法可以根据指定的尺寸调整图像的大小。它可以缩小图像,也可以

    2024年02月02日
    浏览(37)
  • 【精选】使用opencv的resize函数进行等比例放大或缩小图像

    在 OpenCV 中,使用 resize() 函数可以对图像进行缩放操作。若要按比例扩大或缩小图像,可以通过指定目标大小,并结合原始图像的尺寸进行等比例扩大。 以下是一个示例代码,展示了如何在 Python 中使用 OpenCV 对图像进行等比例扩大: 这段代码首先读取原始图像,然后获取其

    2024年02月03日
    浏览(29)
  • 计算机视觉:使用opencv实现车牌识别

    汽车车牌识别(License Plate Recognition)是一个日常生活中的普遍应用,特别是在智能交通系统中,汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起,以准确识别出车牌牌照的字符为目的,将识别出的数据传送至交

    2024年02月04日
    浏览(32)
  • 计算机视觉:使用opencv实现银行卡号识别

    OpenCV是Open Source Computer Vision Library(开源计算机视觉库)的简称,由Intel公司在1999年提出建立,现在由Willow Garage提供运行支持,它是一个高度开源发行的计算机视觉库,可以实现Windows、Linux、Mac等多平台的跨平台操作。opencv是一个用于图像处理、分析、机器视觉方面的开源函

    2024年02月05日
    浏览(35)
  • 【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

    人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式,下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。 可选的人脸检测模型(区别是检测速度和精度不同

    2023年04月12日
    浏览(49)
  • 使用opencv实现图片相似度检测

    1.为什么学这个,我对图像处理非常感兴趣,我联想到海尔的指纹识别门锁是如何进行检测的,我在想不应该呀,单片机性能这么差,应该是使用了训练后的数据去检测图片的,如果我要实现草莓检测,知道它是不是草莓,我觉得单纯使用图片处理是不够的,我考虑过使用指纹模块来接触

    2024年02月05日
    浏览(30)
  • python基于OpenCV预测图片中目标的实际尺寸(计算机视觉)

    本次实验需要根据已知的硬币的直径,预测图片中书本的长与宽以及书本右上方用铅笔画的圆圈的外圆直径。可以先对图片进行矫正,找到硬币的轮廓并计算硬币直径占据的像素大小,进而得到实际尺寸和像素的比例系数,然后找到书本和铅笔绘制的圆圈的轮廓,再根据它们

    2024年02月03日
    浏览(37)
  • OpenCV Python – 使用SIFT实现两张图片的特征匹配

     我们使用尺度不变特征变换(  SIFT  )特征描述符和暴力匹配算法实现两张图像的特征匹配。其中,  SIFT  用于找到图像中的关键点和描述符,而  暴力匹配算法  用于在两张图像中匹配描述符。 要使用  SIFT  特征检查器和  暴力  匹配算法实现两张图像的特征匹配,可

    2024年02月03日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包