2013-07-08 15 views
6

OpenCVが新しく、私はEdge DetectionのCannyチュートリアルを見ていました。 ちょうど作成されたmatのサイズを変更する方法を探していました。コードはこれです:OpenCVで行列を作成した後でサイズを変更する

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

今私はこれでマットのサイズを変更しようとした:

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

しかし、何も変更するようだしません。

私の疑問は2つです: :私はよくやってcreate()resize()を呼び出していますか? :matの寸法を指定するにはどうすればよいですか?

マイ目標は、あなたがsrcと同じサイズでdstマットを作成

答えて

17

明確ではなかった場合、画像のサイズを変更することです。

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 

UPDATE:OpenCVドキュメントから

スケーリングだけで画像のサイズ変更され、あなたが先のサイズとfx/fyスケールファクタの両方を渡すresize呼び出すときにも、あなたは何か1を渡す必要があります。 OpenCVには、この目的のために関数 cv2.resize()が付属しています。イメージのサイズは で手動で指定することも、倍率を指定することもできます。補間方法が異なる が使用されます。好ましい補間方法は、縮小の場合は cv2.INTER_AREA、ズームの場合はcv2.INTER_CUBIC(slow)& cv2.INTER_LINEARです。デフォルトでは、使用される補間方法はすべてのサイズ変更の目的で cv2.INTER_LINEARです。 (OpenCV文書で述べたように)

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_CUBICよりも大幅に高速を縮小し、cv::INTER_AREA作品の両方の方法を試してみました:

次の方法のいずれかの入力 画像のサイズを変更することができます
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); 
関連する問題