Как установить значения нулей в части cv::Mat

#c #opencv

#c #opencv

Вопрос:

У меня есть cv::Mat изображение RGB в виде

 cv::Mat cv_img 
  

Я хочу установить значение нулей для cv_img в некоторых позициях. Например, снизу до половины изображения будут заполнены нулевыми значениями. Как я могу это сделать на c и opencv? Спасибо всем.

Я искал функцию setTo и mask , возможно, является подходящим решением, но мне сложно определить двоичную маску.

 cv_img.setTo(Scalar(0,0,0), mask);
  

Комментарии:

1. Сначала установите roi изображения, которое вы хотите заполнить нулем, cv::Mat RoiImg = cv_img(cv::Range(cv_img.height/2, cv_img.height), cv::Range(0, cv_img.width)); затем установите RoiImg равным нулю с помощью параметрафункция(RoiImg.setTo(Скалярная(0,0,0))).

Ответ №1:

Вы можете добиться этого, установив в пикселях желаемое значение. Просто определите интервалы рентабельности инвестиций (область интереса.

Вот простой код для руководства:

 #include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat img = imread("/ur/img/dir/img.jpg");

    for(int i=img.rows/2; i<img.rows;i  )
    {
        for(int j=0; j<img.cols; j  )
        {
            img.at<Vec3b>(Point(j,i))[0] = 0;
            img.at<Vec3b>(Point(j,i))[1] = 0;
            img.at<Vec3b>(Point(j,i))[2] = 0;

        }
    }

    imshow("Result",img);
    waitKey(0);
                
    return 0;
}
  

Комментарии:

1. Любой способ без цикла?

2. Я не видел функции, выполняющей эту задачу, также может помочь обрезка области и установка для этой области нулей.

Ответ №2:

Вы можете попробовать это:

 int w = cv_img.cols;
int h = cv_img.rows; 
cv::Rect rectZero(0, h/2, w, h/2);
cv_img(rectZero) = cv::Scalar(0,0,0);