找了个 C 代码是这样写的,问题是这个库在 cv::compare
的时候没有 这个 cv::GC_PR_FGD
我在库里面 cgo 调用时把它改为了 3
也是不行的。
有兄弟知道 gocv 怎么调用 grabCut 来抠图吗
cv::Mat image= cv::imread("../tower.jpg");
if (!image.data)
{
cout<<"不能打开图像!"<<endl;
return 0;
}
cv::Rect rectangle(50,70,image.cols-150,image.rows-180);
cv::Mat result;
cv::Mat bgModel,fgModel;
double tt = cv::getTickCount();
cv::grabCut(image,
result,
rectangle,
bgModel,fgModel,
cv::GC_INIT_WITH_RECT); // 用矩形
tt = cv::getTickCount() - tt;
printf("算法执行执行时间:%g ms\n", tt/cv::getTickFrequency()*1000);
cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ);
cv::Mat foreground(image.size(),CV_8UC3,cv::Scalar(255,255,255));
image.copyTo(foreground,result);
1
jorneyr 2021-08-20 09:07:45 +08:00
OpenCV 好像是 C++ 的呢
|
2
Juszoe 2021-08-20 11:01:07 +08:00
按照 opencv 文档 https://docs.opencv.org/3.4/d2/de8/group__core__array.html#ga303cfb72acf8cbb36d884650c09a3a97 compare 的第二个参数应该是 inputArray 呢
|
3
WriteCloser OP @Juszoe 感谢,可能因为版本不一致。放弃 go 去实现,改用 Python 什么毛病都治好了
|