4

2 つの値の配列を定義し、imgproc モジュールのサイズ変更関数を使用して、補間方法として線形補間を使用して 10 要素にサイズ変更しようとしました。

cv::Mat input = cv::Mat(1, 2, CV_32F);
input.at<float>(0, 0) = 0.f;
input.at<float>(0, 1) = 1.f;
cv::Mat output = cv::Mat(1, 11, CV_32F);
cv::resize(input, output, output.size(), 0, 0, cv::INTER_LINEAR);
for(int i=0; i<11; ++i)
{
    std::cout<< output.at<float>(0, i) << " ";
}

私が期待していた出力は次のとおりです。

0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

しかし、私が得るものは次のとおりです。

0 0 0 0.136364 0.318182 0.5 0.681818 0.863636 1 1 1

明らかに、サイズ変更がどのように機能するかについての私の理解は、根本的なレベルで間違っています。誰かが私が間違っていることを教えてもらえますか? 確かに、OpenCV はこのような単純な線形補間にはやり過ぎですが、ここで何が問題なのか教えてください。

4

1 に答える 1

3

それは本当に簡単です。OpenCV は画像処理ライブラリです。したがって、私たちは画像に取り組んでいることを覚えておく必要があります。

宛先画像に 8 ピクセルしかない場合の出力を見てください。

0 0 0.125 0.375 0.625 0.875 1 1

この画像を見ると、サイズ変更の動作を理解するのは非常に簡単です

例

このリンクでわかるように、画像変換ライブラリを使用しています: 「このセクションの関数は、2D 画像のさまざまな幾何学的変換を実行します」

この結果が欲しい

ここに画像の説明を入力

ただし、元の2ピクセル画像は適切に補間されません

于 2013-08-08T11:04:26.273 に答える