я хочу сформировать неправильную форму руки, используя ее края, чтобы я мог найти центр тяжести этой руки, используя http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/moments/moments.html?highlight=moment#code. функция canny обрезает края, поэтому я не могу получить из нее хороший контур.
вот образец вывода http://imageshack.us/photo/my-images/208/cannywithblur.png/
и код.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
int main(){
cv::Mat image= cv::imread("open_1a.jpg");
cv::Mat contours_mat;
cv::Mat gray_image;
blur( image, image, Size(3,3) );
cv::Canny(image,
contours_mat,
40,
120);
cv::namedWindow("Image");
cv::imshow("Image",image);
cv::namedWindow("Canny");
cv::imshow("Canny",contours_mat);
cv::waitKey(0);
}
Я хочу получить контур замкнутой формы и только один контур. Как я могу это сделать?
Вы можете попытаться применить морфологическое закрытие вашего двоичного изображения, которое должно соединить края, которые имеют зазор, который меньше размера вашего структурирующего элемента.
Вы могли бы попробовать кластеризацию по среднему смещению, которая может дать хороший, большой связанный регион для руки. Попытка определить форму, основанную только на краях, может быть сложной, особенно если форма не является простым многоугольником.
Если среднее смещение (или аналогичный алгоритм) может дать хорошую сегментацию между рукой и другими объектами, тогда было бы просто найти геометрический центр или центр масс.
Вы можете изменить свое освещение? Это может помочь совсем немного. Конец пальца и ноготь на среднем пальце представляют проблему из-за низкой контрастности: между цветом фона и цветом среднего ногтя есть небольшая разница.
Коллимированное освещение спереди устранит затенение. Другим вариантом будет использование подсветки.
Если по какой-то причине вам приходится работать с ребрами, то один из наиболее многообещающих методов соединения ломаных ребер («завершение фигуры») основан на «естественных» или «эстетических» кривых, таких как спираль Эйлера. Учитывая две конечные точки и касательные в этих конечных точках, можно найти естественную соединительную кривую.
http://www.lems.brown.edu/vision/researchAreas/EulerSpiral/index.html