如何从OpenCV的凹凸缺陷点画出最小的圆
How can I draw the smallest circle from the convexity defect points OpenCV
我一直在使用OpenCV做一个手部识别,我得到了这个代码,我可以找到轮廓,凸壳&;一些缺陷点。但是我现在很难从缺陷点画出最小的圆(只是轮廓)。我想知道如何使用具体的点,如缺陷点来画一个圆的轮廓。顺便说一句,我使用的是XCode 5.1 &对不起,我的英语不好。谢谢你!
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cvaux.h>
using namespace cv;
using namespace std;
Mat image, gray_image, blur_image, binary_image;
int thresh = 90;
int main( int argc, char** argv){
namedWindow("Window", CV_WINDOW_AUTOSIZE);
image = imread("/Users/Jamesbond/Desktop/hand.png");
cvtColor(image, gray_image, CV_BGR2GRAY);
medianBlur(gray_image, blur_image, 11);
Canny(blur_image, binary_image, 90, 180, 3);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(binary_image, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0,0));
if(contours.size()>0){
vector<vector<int>>hull(contours.size());
vector<vector<Vec4i>>convDef(contours.size());
vector<vector<Point>>hull_points(contours.size());
vector<vector<Point>> defect_points(contours.size());
for( int i = 0; i < contours.size(); i++ )
{
convexHull( contours[i], hull[i], false );
convexityDefects( contours[i],hull[i], convDef[i]);
for(int k=0;k<hull[i].size();k++)
{
int ind=hull[i][k];
hull_points[i].push_back(contours[i][ind]);
}
for(int k=0;k<convDef[i].size();k++)
{
int ind = convDef[i][k][2];
defect_points[i].push_back(contours[i][ind]);
circle(image,contours[i][ind],5,Scalar(255,0,0),-1);
drawContours( image, contours, i, Scalar(255,0,255), 2, 8, vector<Vec4i>(), 0, Point());
drawContours( image, hull_points, i, Scalar(255,255,0), 2, 8, vector<Vec4i>(), 0, Point());
}
}
imshow("Window", image);
waitKey(0);
}
}
还没有测试过,但应该是这样的:
// collect the defects:
//
for(int k=0;k<convDef[i].size();k++)
{
int ind = convDef[i][k][2];
defect_points[i].push_back(contours[i][ind]);
circle(image,contours[i][ind],5,Scalar(255,0,0),-1);
drawContours( image, contours, i, Scalar(255,0,255), 2, 8, vector<Vec4i>(), 0, Point());
drawContours( image, hull_points, i, Scalar(255,255,0), 2, 8, vector<Vec4i>(), 0, Point());
}
// draw smallest circle around defects:
//
Point center;
float radius;
minEnclosingCircle( defect_points, center, radius );
circle(image,center,radius,Scalar(255,0,0),3);
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- OpenCV C++.快速计算混淆矩阵
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 绘制凸度缺陷C OPENCV
- 在opencv中发现凸性缺陷?[崩溃取决于给定的输入图像]
- OpenCv 凸性缺陷
- OpenCV-消除凸性缺陷(Python到C++)
- OpenCV和凸面缺陷
- 在opencv c++函数中查找凸性缺陷点
- 一个c++凹凸缺陷包装器(OpenCV)
- 寻找凸缺陷?在OpenCV 2.3, c++和MS Visual Studio2010中
- 如何从OpenCV的凹凸缺陷点画出最小的圆
- 凹凸性缺陷c++ OpenCv
- OpenCv凹凸性缺陷
- OpenCV凹凸缺陷绘图