Как сохранить черные пиксели изображения в градациях серого и нарисовать его в другом изображении в градациях серого того же размера?

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

std::vector< std::vector <cv::Point> > Black_Pixel;
for(int y = 0; y < Original_Image.rows; y++)
{
for(int x = 0; x < Original_Image.cols; x++)
{
if (Original_Image.at<unsigned char>(x,y) == 0 )
{
Black_Pixel[0].push_back(cv::Point(x,y));
Black_Pixel.push_back( std::vector <cv::Point>());
}
}
}

for( unsigned int idx = 0; idx < Black_Pixel.size(); idx++ )
{
New_image.at<unsigned char>(Black_Pixel[0][idx].x,Black_Pixel[0][idx].y) = 0;
cv::waitKey();
}

0

Решение

Попробуй это:
row.push_back (резюме :: Point (х, у));

На самом деле, уберите строку и вместо этого:

Black_Pixel[0].push_back(cv::Point(x,y));

конечно сначала нужно инициализировать 0-й элемент в Black_Pixel:

Black_Pixel.push_back(std::vector<cv::Point>);
1

Другие решения

std::vector <cv::Point> Black_Pixel;
for(int y = 0; y < Original_Image.cols; y++)
{
for(int x = 0; x < Original_Image.rows; x++)
{
if (Original_Image.at<unsigned char>(x,y) == 0 )
{
Black_Pixel.push_back(cv::Point(x,y));
}
}
}

for( unsigned int idx = 0; idx < Black_Pixel.size(); idx++ )
{
New_image.at<unsigned char>(Black_Pixel[idx]) = 0;
}

cv::imshow("New Image", New_image);
1