从图像中检测任何形状的对象并为单个对象着色

时间:2013-04-18 11:05:49

标签: iphone ios opencv

我是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);

1 个答案:

答案 0 :(得分:0)

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

您可能感兴趣的另一个选项是查看segmentation algorithms以选择图像中的某些对象。如果您不了解对象,正在查找的对象以及正在处理的图像,则无法提供良好的建议。没有适用于每个图像的通用算法(至少据我所知)。

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