如何使用opencv找到凸性缺陷?
我有以下代码
#include"opencv2/opencv.hpp"
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;
main()
{
Mat img1,img2,sub,gray1,gray2,lab,ycbcr;
int v[3];
int row,col,i,j,t;
VideoCapture cap(0);
namedWindow("current");
cap>>img1;
sub=img1;
row=img1.rows;
col=img1.cols;
cvtColor(img1,gray1,CV_BGR2GRAY);
vector<vector<Point> > cont;
vector<Vec4i> hierarchy;
while (1) {
cap>>img2;
cvtColor(img2,gray2,CV_BGR2GRAY);
for(i=0;i<row;++i)
{
for (j=0; j<col; ++j)
{
if(abs(gray1.at<uchar>(i,j) - gray2.at<uchar>(i,j))>10)
{
sub.at<Vec3b>(i,j)[0] = img2.at<Vec3b>(i,j)[0];
sub.at<Vec3b>(i,j)[1] = img2.at<Vec3b>(i,j)[1];
sub.at<Vec3b>(i,j)[2] = img2.at<Vec3b>(i,j)[2];
}
else
{
sub.at<Vec3b>(i,j)[0]=0;
sub.at<Vec3b>(i,j)[1]=0;
sub.at<Vec3b>(i,j)[2]=0;
}
}
}
cvtColor(sub,ycbcr,CV_BGR2YCrCb);
inRange(ycbcr,Scalar(7,133,106),Scalar(255,178,129),ycbcr);
findContours(ycbcr,cont,hierarchy,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE);
Scalar color = CV_RGB(255,255,255);
vector<vector<Point> > hullPoints(cont.size());
for( i = 0; i < cont.size(); i++ )
convexHull(cont[i],hullPoints[i],false);
for(i = 0 ;i >= 0; i = hierarchy[i][0] )
{
drawContours( ycbcr, cont, i, color,1, CV_AA, hierarchy );//for drawing contours
drawContours( ycbcr, hullPoints, i, color,2, CV_AA, hierarchy );//for drawing convex hull
}
flip(ycbcr,ycbcr,1);
imshow("current",ycbcr);
if(waitKey(33)=='q')
break;
img1=img2.clone();
}
}
如何找到凸包中的凸性缺陷..cvConvexityDefects() 需要 const cvArr * 作为参数。但是我有来自凸包的向量点类型结果..那么如何类型转换..?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该使用
vector>
类型进行convexHull
计算:然后调用:
类似于 凸性缺陷 C++ OpenCv
和许多其他问题:)希望有帮助!
You should be using the
vector<vector<int>>
type for yourconvexHull
calculations:Then call:
Similar to Convexity defects C++ OpenCv
and many other SO questions :) Hope that helps!