Quantcast
Channel: OpenCV Q&A Forum - Latest question feed
Viewing all articles
Browse latest Browse all 19555

Hand detection not working.

$
0
0
I'm using OpenCV3 with Visual Studio 2015 in C++. I cannot seem to get the program to detect my hand only. It creates a contour of my hand and the surrounding wall when I don't make it only display the largest area contour. However when I force it to find and display only the largest area contour, it completely ignores my hand. I've tried it in several background cases including a white wall with just my hand. My code is as follows: #include "opencv2\opencv.hpp" using namespace cv; void on_trackbar(int, void*) { // Dummy function } int main(int argv, char** argc) { Mat frame; Mat grayFrame; Mat hsvFrame; Mat thesholdFrame; VideoCapture capture; //Trackbar variables (H,S,V) int H_MIN = 0; int H_MAX = 180; int S_MIN = 0; int S_MAX = 255; int V_MIN = 0; int V_MAX = 255; namedWindow("trackbar", 0); //create memory to store trackbar name on window char TrackbarName[50]; sprintf(TrackbarName, "H_MIN"); sprintf(TrackbarName, "H_MAX"); sprintf(TrackbarName, "S_MIN"); sprintf(TrackbarName, "S_MAX"); sprintf(TrackbarName, "V_MIN"); sprintf(TrackbarName, "V_MAX"); createTrackbar("H_MIN", "trackbar", &H_MIN, H_MAX, on_trackbar); createTrackbar("H_MAX", "trackbar", &H_MAX, H_MAX, on_trackbar); createTrackbar("S_MIN", "trackbar", &S_MIN, S_MAX, on_trackbar); createTrackbar("S_MAX", "trackbar", &S_MAX, S_MAX, on_trackbar); createTrackbar("V_MIN", "trackbar", &V_MIN, V_MAX, on_trackbar); createTrackbar("V_MAX", "trackbar", &V_MAX, V_MAX, on_trackbar); capture.open(0); std::vector> contours; while (true){ capture >> frame; waitKey(10); cvtColor(frame, hsvFrame, COLOR_BGR2HSV); //imshow("HSV", hsvFrame); inRange(hsvFrame, Scalar(H_MIN, S_MIN, V_MIN), Scalar(H_MAX, S_MAX, V_MAX), thesholdFrame); int dilation_size = 3; Mat element = getStructuringElement(MORPH_ELLIPSE, Size(2 * dilation_size + 1, 2 * dilation_size + 1), Point(dilation_size, dilation_size)); //medianBlur(hsvFrame, hsvFrame, 5); //dilate(hsvFrame, hsvFrame, element); findContours(thesholdFrame, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); int largest_contour_area = 0; int largest_contour_area_index = 1; for (int i = 0; i < contours.size(); i++) { double contour_area = contourArea(contours[i], false); if (contour_area > largest_contour_area) { largest_contour_area = contour_area; largest_contour_area_index = i; } } drawContours(frame, contours, largest_contour_area_index, (0, 255, 0), 1); //drawContours(frame, contours, -1, (0, 255, 0), 3); putText(frame, "NO DETECTION", Point(25, 40), 2, 1, CV_RGB(255, 255, 0), 1, 8, false); imshow("Threshold", thesholdFrame); //imshow("HSV", hsvFrame); imshow("Camera", frame); } } Can any of you try and run this to see if it works? Keep in mind that I am new to OpenCV.

Viewing all articles
Browse latest Browse all 19555

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>