0

我是opencv的新手,做一些像从图像中检测不同的对象并对单个对象应用效果。我找到边缘,并使用以下代码获取轮廓,但我不知道如何继续前进。有什么帮助吗???提前致谢

cv::Mat edges;
cv::Canny(gray, edges, 50, 150);

std::vector< std::vector<cv::Point> > c;
std::vector<cv::Point> points;
cv::findContours(edges, c, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
cv::Mat mask = cv::Mat::zeros(edges.rows, edges.cols, CV_8UC1);
  for (size_t i=0; i<c.size(); i++)
   {
   for (size_t j = 0; j < c[i].size(); j++)
   {
    cv::Point p = c[i][j];
    points.push_back(p);
    // printf(" %d \t",p.x);
   }


}
cv::Mat crop(inputFrame.rows, inputFrame.cols, CV_8UC3);
inputFrame.copyTo(outputFrame, mask);
4

1 回答 1

0

由于您选择通过轮廓识别对象,我建议您继续使用“广义霍夫变换”(PDF)。您必须为要识别的对象创建参考轮廓(从每个可能的角度)。

您可能会感兴趣的另一种选择是研究分割算法以选择图像中的某些对象。如果不了解您正在寻找的对象以及您正在处理的图像,就不可能给出好的建议。没有适用于每张图像的通用算法(至少据我所知)。

为了让您了解最先进的对象类识别,您可以查看PASCAL VOC Challenge。如果您的问题比挑战更简单(例如,一小组不可变对象,站在一个彩色背景前面),您应该在您的问题中指定它,也许有人可以给您更好的建议。

于 2013-04-18T11:57:36.560 回答