【问题标题】:resize a Matrix after created it in OpenCV在 OpenCV 中创建矩阵后调整其大小
【发布时间】:2013-07-06 04:00:23
【问题描述】:

我是 OpenCV 的新手,我正在查看 Canny 的边缘检测教程。 我正在研究如何调整刚刚创建的mat 的大小。代码是这样的:

 src = imread( impath );
 ...
 dst.create( src.size(), src.type() );

现在我尝试用这个来调整垫子的大小:

resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC);

但它似乎并没有改变任何东西。

我的疑问有两个: 1 :在create() 之后调用resize() 做得好吗? 2 : 如何指定mat 的尺寸?

我的目标是调整图像大小,如果图像不清晰

【问题讨论】:

    标签: c++ image opencv image-resizing


    【解决方案1】:

    您创建了与src 大小相同的dst 垫子。此外,当您调用 resize 时,您同时传递了目标大小和 fx/fy 比例因子,您应该传递一个:

    Mat src = imread(...);
    Mat dst;
    resize(src, dst, Size(), 2, 2, INTER_CUBIC); // upscale 2x
    // or
    resize(src, dst, Size(1024, 768), 0, 0, INTER_CUBIC); // resize to 1024x768 resolution
    

    更新:来自OpenCV 文档:

    缩放只是调整图像的大小。 OpenCV自带一个函数 cv2.resize() 用于此目的。可以指定图片大小 手动,或者您可以指定比例因子。不同的 使用插值方法。优选的插值方法是 cv2.INTER_AREA 用于收缩和 cv2.INTER_CUBIC (slow) & cv2.INTER_LINEAR 用于缩放。默认情况下,使用的插值方法是 cv2.INTER_LINEAR 用于所有调整大小的目的。您可以调整输入的大小 image 以下方法之一:

    import cv2
    import numpy as np
    img = cv2.imread('messi5.jpg')
    res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
    #OR
    height, width = img.shape[:2]
    res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
    

    另外,在Visual C++ 中,我尝试了两种缩小方法,cv::INTER_AREA 的工作速度明显快于cv::INTER_CUBIC(如OpenCV 文档所述):

    cv::Mat img_dst;
    cv::resize(img, img_dst, cv::Size(640, 480), 0, 0, cv::INTER_AREA);
    cv::namedWindow("Contours", CV_WINDOW_AUTOSIZE);
    cv::imshow("Contours", img_dst);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2010-10-22
      • 1970-01-01
      相关资源
      最近更新 更多