【发布时间】:2012-09-30 09:31:13
【问题描述】:
我使用 cv::grabCut 从图像中提取对象。它运行良好。
现在我将对象放在一个没有背景的单独垫子中,我想为整个对象设置黑色。我想为所有标有 GC_PR_FGD(前景像素)的像素设置黑色。
我该怎么做?
谢谢!!
【问题讨论】:
标签: ios image-processing opencv pixels foreground
我使用 cv::grabCut 从图像中提取对象。它运行良好。
现在我将对象放在一个没有背景的单独垫子中,我想为整个对象设置黑色。我想为所有标有 GC_PR_FGD(前景像素)的像素设置黑色。
我该怎么做?
谢谢!!
【问题讨论】:
标签: ios image-processing opencv pixels foreground
从cv::grabCut documentation 看来,您可以得到一个具有以下值的掩码作为输出:
我假设您想要一张背景为白色、前景为黑色的图像。在这种情况下,您可以创建一个新矩阵,并在遍历掩码像素时,根据掩码像素值为该矩阵分配 0 或 1(或 255)。
例如,假设你得到一个cv::Mat mask作为算法的结果,做类似的事情(警告,我还没有编译,它是近似的):
cv::Mat binaryImage = zeros(mask.rows, mask.cols, CV_8U);
for (int i==0; i<mask.rows; ++i){
for (int j==0; j<mask.cols; ++j){
// choose pixels that are certainly or likely background
if (mask.at<uchar>(i,j) == GC_BGD || mask.at<uchar>(i,j) == GC_BGD){
binaryImage.at<uchar>(i,j) = 255;
}
}
}
【讨论】:
i 和j!马上修好。很高兴它帮助了你