2016-05-13 3 views
2

OpenCVを使用して画像のサイズを変更しようとしています。解像度は正しいですが、画像の品質は低下します。しかし、Apple Previewを使用して手動でサイズを変更すると、画質には影響しません。私はこれらの画像をすべて吹き飛ばすのではなく、小さくしています。ここでは、品質を比較する2つの画像があります。OpenCVのサイズ変更の度合い

悪いリサイズ:

Bad OpenCV resize

グッドサイズ変更:ここで

Good Apple Preview resize

が私のコードです:

cv::Mat srcimg = cv::imread(src_filepath); 
cv::Mat destimg = cv::imread(lowres_path); 
cv::Size img_size = srcimg.size(); 
int img_width = img_size.width; 
int img_height = img_size.height; 
double percentage = 1000.0/(img_width); 
double new_height = img_height * percentage; 
cv::Size new_size = cv::Size(1000.0, new_height); 
cv::resize(srcimg, destimg, new_size,0,0,CV_INTER_LANCZOS4); 
cv::imwrite(lowres_path, destimg); 
ギザギザのスポーク自転車のギザギザのトップチューブに注意してください。

私は混乱しました補間を使っても、画像には何の効果もないようです。

+1

オリジナルの画像も投稿できますか? –

+0

@DanMašek:http://i.imgur.com/HYGvpSY.jpg – pnus

+0

ドキュメントによれば、「イメージを縮小するには、通常、CV_INTER_AREA補間で最もよく見えます。それを試しましたか?私にとってはLanczos補間よりもはるかに良く見えます。 –

答えて

1

よろしくお願いします。私はそれをCV_INTER_AREAに戻し、明示的に圧縮設定を行いました:

cv::resize(srcimg, destimg, new_size,0,0,CV_INTER_AREA); 
vector<int> compression_params; 
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); 
compression_params.push_back(100); 
cv::imwrite(lowres_path, destimg); 
+1

ああ、そういうわけでJPEGをしていたのですか?品質の低下を避けたい場合は、PNGのようなロスレスコーデックを使用することもできます。 –

関連する問題