相关疑难解决方法(0)

使用OpenCV凸包和凸度缺陷函数进行手指跟踪/计数

我一直在使用OpenCV和ConvexHull和ConvexityDefects方法处理基本的手/手指跟踪代码.

基本上我能够创造出手的轮廓.我现在需要能够计算手指的数量.我知道Convex Hull的起点和终点是指尖,但我不确定如何计算它们以及如何通过在它们上面绘制圆圈来突出它们.

我希望我的代码能够执行这样的操作.

到目前为止,这是我的代码的示例部分:

cvFindContours( hsv_mask, storage, &contours, sizeof(CvContour), CV_RETR_LIST,         CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );

CvSeq* contours2 = NULL;

CvRect rect = cvBoundingRect( contours2, 0 );

cvRectangle( bitImage, cvPoint(rect.x, rect.y + rect.height), cvPoint(rect.x + rect.width, rect.y), CV_RGB(200, 0, 200), 1, 8, 0 );

CvSeq* hull = cvConvexHull2( contours2, 0, CV_CLOCKWISE, 0 );

CvSeq* defect = cvConvexityDefects( contours2, hull, dftStorage );

CvBox2D box = cvMinAreaRect2( contours2, minStorage );

cvDrawContours( bg, contours2,  CV_RGB( 0, 200, 0), CV_RGB( 0, 100, 0), 1, …
Run Code Online (Sandbox Code Playgroud)

c++ opencv tracking gesture-recognition computer-vision

12
推荐指数
1
解决办法
1万
查看次数

在opencv中找到凸性缺陷?[根据给定的输入图像崩溃..]

我有一个计算图像凸包的程序。我正在尝试使用此信息来计算输入图像中存在的手指数量。从一些冲浪我发现这样做的方法(数手指)是通过

  1. 寻找轮廓
  2. 凸包
  3. 凸面缺陷

但是我在使用凸度缺陷函数时遇到了麻烦。它编译得很好,但在运行时程序会因某些输入图像而崩溃,但不会与其他图像一起崩溃,我似乎无法弄清楚原因。

这些是输入图像

  1. 图像导致崩溃
  2. 这个没有。
  3. 即使与上述类似,也会导致崩溃

代码..

#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>
#include <stdio.h>

#define CVX_RED     CV_RGB(0xff,0x00,0x00)
#define CVX_GREEN   CV_RGB(0x00,0xff,0x00)
#define CVX_BLUE    CV_RGB(0x00,0x00,0xff)

int main(int argc, char* argv[]) {

  cvNamedWindow( "original", 1 );
  cvNamedWindow( "contours", 1 );
  cvNamedWindow( "hull", 1 );
  IplImage* original_img = NULL;

  original_img = cvLoadImage("img.jpg", CV_LOAD_IMAGE_GRAYSCALE );

  IplImage* img_edge = cvCreateImage( cvGetSize(original_img), 8, 1 );
  IplImage* contour_img = cvCreateImage( cvGetSize(original_img), 8, 3 );
  IplImage* hull_img = …
Run Code Online (Sandbox Code Playgroud)

c c++ opencv image-processing convex-hull

5
推荐指数
1
解决办法
3165
查看次数