我是OpenCV的新手,我正在研究Canny的边缘检测教程。
我正在研究如何调整刚刚创建的mat
的大小。代码是这样的:
src = imread( impath );
...
dst.create( src.size(), src.type() );
现在我尝试用这个来调整垫子的大小:
resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC);
但它似乎没有改变任何东西。
我怀疑是两个:
1 :我在resize()
之后打电话给create()
了吗?
2 :如何指定mat
的尺寸?
我的目标是调整图片大小(如果不清楚)
答案 0 :(得分:22)
您创建的dst
垫与src
的尺寸相同。另外,当您致电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(慢)& 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);