Создать пустое изображение в OpenCV С++

Я пытаюсь создать пустое изображение (позже для заполнения) с помощью OpenCV, но оно должно быть того же размера, что и предопределенное изображение, как новое изображение. Я попробовал следующий код:

(изображение будет изображением Лены, которое успешно отображается)

    Mat lena1(Size(image.cols,image.rows),CV_8UC1);
    namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
    //imshow( "Display Image", image );
    imshow("blank", lena1);

Но по какой-то причине он по-прежнему показывает «изображение», а не lena1 (это было бы пустое изображение с теми же размерами, что и предопределенное изображение).

Благодарю вас!


person MutedSeason    schedule 15.01.2020    source источник
comment
Вы правильно создаете пустое изображение, но я не вижу никакого кода для фактического заполнения вашей матрицы пикселями lena1, поэтому, конечно, imshow отображает пустое изображение.   -  person pptaszni    schedule 15.01.2020
comment
Это lena1(Size(image.cols,image.rows),CV_8UC1); неправильный способ создания пустого изображения. Он инициализирует изображение случайными значениями или, возможно, мы должны сказать, что оно оставляет изображение как неинициализированное, вы должны использовать перегрузку, берущую Scalar со всеми компонентами, установленными на 0: lena1(Size(image.cols,image.rows),CV_8UC1,cv::Scalar());   -  person rafix07    schedule 15.01.2020


Ответы (1)


Чтобы создать пустое изображение (изображение, заполненное нулями), используйте cv::Mat::zeros(). Он создаст матрицу размера и типа по вашему выбору, заполненную нулями.

В вашем случае используйте следующий код,

Mat lena1 = Mat::zeros(Size(image.cols,image.rows),CV_8UC1);

Чтобы заполнить его предварительно загруженным изображением,

image.copyTo(lena1);
person yapws87    schedule 15.01.2020
comment
Спасибо! Это было именно так, большое спасибо, полностью решено! - person MutedSeason; 15.01.2020