Je suis nouveau sur OpenCV et je regardais le tutoriel Canny pour Edge Detection. Je cherchais comment redimensionner un mat
que je viens de créer. Le code est le suivant:
src = imread( impath );
...
dst.create( src.size(), src.type() );
maintenant j'ai essayé de redimensionner le tapis avec ceci:
resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC);
Mais cela ne semble rien changer.
Mes doutes sont deux: 1: Est-ce que je fais bien d'appeler resize()
après create()
? 2: Comment puis-je spécifier les dimensions du mat
?
Mon objectif est de redimensionner l'image, si elle n'était pas claire
Vous créez dst
mat avec la même taille que src
. De plus, lorsque vous appelez resize
, vous transmettez à la fois la taille de destination et fx/fy
facteurs d'échelle, vous devez passer quelque chose un:
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
MISE À JOUR: de la documentation OpenCV
:
La mise à l'échelle est simplement un redimensionnement de l'image. OpenCV est fourni avec une fonction cv2.resize () à cet effet. La taille de l'image peut être spécifiée manuellement ou vous pouvez spécifier le facteur d'échelle. Différentes méthodes d'interpolation sont utilisées. Les méthodes d'interpolation préférées sont cv2.INTER_AREA pour le rétrécissement et cv2.INTER_CUBIC (lent) et cv2.INTER_LINEAR pour le zoom. Par défaut, la méthode d'interpolation utilisée est cv2.INTER_LINEAR à toutes fins de redimensionnement. Vous pouvez redimensionner une image d'entrée selon l'une des méthodes suivantes:
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)
Aussi dans Visual C++
, J'ai essayé les deux méthodes de réduction et cv::INTER_AREA
fonctionne beaucoup plus rapidement que cv::INTER_CUBIC
(comme mentionné par la documentation 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);