我使用 cv::grabCut 从图像中提取对象。运行良好。
现在我将对象放在一个没有背景的单独垫子中,并且我想将整个对象设置为黑色。我想将所有标有 GC_PR_FGD 的像素(前景像素)设置为黑色。
我该怎么做?
谢谢!!
最佳答案
来自cv::grabCut documentation看来您可以获得具有以下值的掩码作为输出:
- GC_BGD 当然是背景像素
- GC_FGD 当然是前景(对象)像素
- GC_PR_BGD 可能是背景像素
- GC_PR_FGD 可能是前景像素
我假设您想要一个背景为白色、前景为黑色的图像。在这种情况下,您可以创建一个新矩阵,并在循环遍历蒙版像素时,根据蒙版像素值向该矩阵分配 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;
}
}
}
关于ios - OpenCV 将颜色设置为前景标记像素 GC_PR_FGD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12810405/