私はOpenCVを初めて使用し、エッジ検出のCannyチュートリアルを見ていました。作成したmat
のサイズを変更する方法を探していました。コードはこれです:
src = imread( impath );
...
dst.create( src.size(), src.type() );
今私はこれでマットのサイズを変更しようとしました:
resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC);
しかし、それは何も変更しないようです。
私の疑問は2つです:1:resize()
の後にcreate()
を呼び出すのはうまくいっていますか? 2:mat
の次元を指定するにはどうすればよいですか?
私の目標は、画像のサイズが明確でない場合はサイズを変更することです
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
PDATE:OpenCV
ドキュメントから:
スケーリングとは、単に画像のサイズを変更することです。 OpenCVには、この目的のために関数cv2.resize()が付属しています。画像のサイズは手動で指定することも、倍率を指定することもできます。さまざまな補間方法が使用されます。好ましい補間方法は、縮小の場合はcv2.INTER_AREA、ズームの場合はcv2.INTER_CUBIC(遅い)とcv2.INTER_LINEARです。デフォルトでは、すべてのサイズ変更の目的で使用される補間方法はcv2.INTER_LINEARです。次のいずれかの方法で入力画像のサイズを変更できます。
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);