2016-11-30 2 views
2

Ich habe das folgende Problem. I die Größe Bild mit OpenCV 1 auf diese Weise:Größe Bild mit OpenCV mit Doppel-Skala

cvResize(img1, img2); 

wo:

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

Dann will ich mit 255 das Halbbild füllen (nur zum Testen):

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

Wenn ratioScale eine Genauigkeit von 1 Nachkommastelle hat (zB 1,5), funktioniert es korrekt. Andernfalls (z. B. 1.59) gibt es mehrere weiße Diagonalen und nicht die Hälfte des Bildes. Ich verstehe nicht warum. Alle Bilder sind Graustufen.


muss ich OpenCV 1 verwenden, weil es Pflicht der Firma ist.

Antwort

3

In alten OpenCV-Versionen werden die Daten normalerweise nicht im Arbeitsspeicher abgelegt, sondern am Ende jeder Zeile mit einer Auffüllung versehen. Die Länge der Zeile plus Auffüllung ist gegeben durch widthStep. Wenn Sie width verwenden, berücksichtigen Sie das (evantual) Auffüllen nicht, und als Ergebnis erhalten Sie diesen Effekt Diagonalisierung.

So was Sie tun müssen:

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

Sie sollten wirklich vermeiden OpenCV 1, zu verwenden, da es jetzt 10 Jahre alt ist, und es ist veraltet.

+0

Froh, dass es geholfen hat; D – Miki