OpenCV:如何将矢量<point>写入图像

OpenCV: How to write vector<point> to image

本文关键字:gt point 图像 lt OpenCV      更新时间:2023-10-16
cv::Mat in = cv::imread("SegmentedImage.png");
// vector with all non-white point positions
std::vector<Point> nonWhiteList;
nonWhiteList.reserve(in.rows*in.cols);
// add all non-white points to the vector
for(int j=0; j< in.rows; ++j)
{
    for(int i=0; i<in.cols; ++i)
    {
        // if not white: add to the list
        if(in.at<cv::Vec3b>(j,i) != cv::Vec3b(255,255,255))
        {
            nonWhiteList.push_back(cv::Point(i,j));
        }
    }
}
cv::Mat BKGR = imread("photo_booth_Cars.png", CV_LOAD_IMAGE_COLOR); //1529x736

我需要把vector<Point> nonWhiteList写成图像BKGR,怎么办?

基本上,需要从图像中删除白色背景并将非白点放在另一个背景图像上。对抓取和查找轮廓进行了大量研究。

我是Opencv的新手。非常感谢您的帮助。

 cv::Mat BKGR = imread("photo_booth_Cars.png", CV_LOAD_IMAGE_COLOR); //1529x736            
for(int j=0; j<in.rows; ++j) 

for(int i=0; i<in.cols; ++i)
{
    if(in.at<cv::Vec3b>(j,i) != cv::Vec3b(255,255,255))
    {
BKGR.at<cv::Vec3b>(j,i) = in.at<cv::Vec3b>(j,i);
    }
}
cv::imwrite("newFinalImage.png", BKGR);

如果图像具有相同的维度,则有意义,除非您知道 2 个图像相机参数,否则很难直接复制。但是,您可以使用插值使两个图像的大小相同。

如果图像大小相同,那么为什么需要创建一个 std::vector 而不是将其复制到另一个 cv::Mat。您可以在同一循环中实现此目的,而无需额外的计算开销。就像填充数组一样简单。但是你的问题是模棱两可的。