2016-11-30 4 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; 

Вы действительно должны избегать использования OpenCV 1, так как в настоящее время это 10 лет, и это устаревшие.

+0

Рад, что это помогло: D – Miki

Смежные вопросы