2016-11-30 9 views
2

次の問題があります。私はこのようにOpenCVの1で画像のサイズを変更:倍率でOpenCVで画像サイズを変更

cvResize(img1, img2); 

img2= cvCreateImage(cvSize(img1->width * ratioScale + 0.5, img1->height * ratioScale + 0.5), IPL_DEPTH_8U, 1); 

その後、私は(ちょうどテストする)255で半分の画像を埋めるためにしたい:

for (int j = 0; j < img2->height; j++){ 
    for (int i = 0; i < img2->width/2; i++){ 
    img2->imageData[j*img2->width + i] = 255; 
    } 
} 

ratioScaleの精度が小数点以下1桁(1.5など)の場合、正しく動作します。そうでなければ(例えば、1.59)、それはいくつかの白い対角線を与え、画像の半分は与えない。私はなぜなのか理解していない。すべての画像はグレースケールです。


それは会社からの義務であるので、私はOpenCVの1を使用する必要があります。

答えて

3

通常、古いOpenCVバージョンでは、データをメモリに連続してレイアウトしませんが、各行の最後にはいくつかのパディングを使用します。行とパディングの長さはwidthStepで与えられます。 widthを使用する場合は、(エバンテージ)パディングを考慮しないため、結果として対角化効果が得られます。

だから、実行する必要があります。

img2->imageData[j*img2->widthStep + i] = 255; 

それは今10歳だからあなたは本当に、OpenCVの1を使用することを避けなければならない、そしてそれは時代遅れです。

+0

喜んで助けました; D – Miki

関連する問題