• Home
  • Raw
  • Download

Lines Matching +full:create +full:- +full:release

3  * Copyright (C) 2013 Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>
41 * Boston, MA 02110-1301, USA.
45 * SECTION:element-skindetect
52 * gst-launch-1.0 videotestsrc ! decodebin ! videoconvert ! skindetect ! videoconvert ! xvimagesink
94 {RGB, "Normalised-RGB colorspace thresholding", "rgb"}, in gst_skin_detect_method_get_type()
146 gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_skin_detect_finalize); in gst_skin_detect_class_init()
147 gobject_class->set_property = gst_skin_detect_set_property; in gst_skin_detect_class_init()
148 gobject_class->get_property = gst_skin_detect_get_property; in gst_skin_detect_class_init()
150 gstopencvbasefilter_class->cv_trans_func = gst_skin_detect_transform; in gst_skin_detect_class_init()
154 "Apply opening-closing to skin detection to extract large, significant blobs ", in gst_skin_detect_class_init()
167 "Performs non-parametric skin detection on input", in gst_skin_detect_class_init()
168 "Miguel Casas-Sanchez <miguelecasassanchez@gmail.com>"); in gst_skin_detect_class_init()
173 gstopencvbasefilter_class->cv_set_caps = gst_skin_detect_set_caps; in gst_skin_detect_class_init()
186 filter->postprocess = TRUE; in gst_skin_detect_init()
187 filter->method = HSV; in gst_skin_detect_init()
202 filter->postprocess = g_value_get_boolean (value); in gst_skin_detect_set_property()
205 filter->method = g_value_get_enum (value); in gst_skin_detect_set_property()
221 g_value_set_boolean (value, filter->postprocess); in gst_skin_detect_get_property()
224 g_value_set_enum (value, filter->method); in gst_skin_detect_get_property()
242 filter->cvRGB.create (size, CV_8UC3); in gst_skin_detect_set_caps()
243 filter->cvChA.create (size, CV_8UC1); in gst_skin_detect_set_caps()
244 filter->width = in_width; in gst_skin_detect_set_caps()
245 filter->height = in_height; in gst_skin_detect_set_caps()
247 filter->cvHSV.create (size, CV_8UC3); in gst_skin_detect_set_caps()
248 filter->cvH.create (size, CV_8UC1); /* Hue component. */ in gst_skin_detect_set_caps()
249 filter->cvH2.create (size, CV_8UC1); /* Hue component, 2nd threshold */ in gst_skin_detect_set_caps()
250 filter->cvS.create (size, CV_8UC1); /* Saturation component. */ in gst_skin_detect_set_caps()
251 filter->cvV.create (size, CV_8UC1); /* Brightness component. */ in gst_skin_detect_set_caps()
252 filter->cvSkinPixels1.create (size, CV_8UC1); /* Greyscale output image */ in gst_skin_detect_set_caps()
254 filter->cvR.create (size, CV_8UC1); /* R component. */ in gst_skin_detect_set_caps()
255 filter->cvG.create (size, CV_8UC1); /* G component. */ in gst_skin_detect_set_caps()
256 filter->cvB.create (size, CV_8UC1); /* B component. */ in gst_skin_detect_set_caps()
257 filter->cvAll.create (size, CV_32FC1); /* (R+G+B) component. */ in gst_skin_detect_set_caps()
258 filter->cvR2.create (size, CV_32FC1); /* R component, 32bits */ in gst_skin_detect_set_caps()
259 filter->cvRp.create (size, CV_32FC1); /* R' and >0.4 */ in gst_skin_detect_set_caps()
260 filter->cvGp.create (size, CV_32FC1); /* G' and > 0.28 */ in gst_skin_detect_set_caps()
261 filter->cvRp2.create (size, CV_32FC1); /* R' <0.6 */ in gst_skin_detect_set_caps()
262 filter->cvGp2.create (size, CV_32FC1); /* G' <0.4 */ in gst_skin_detect_set_caps()
263 filter->cvSkinPixels2.create (size, CV_32FC1); /* Greyscale output image. */ in gst_skin_detect_set_caps()
264 filter->cvdraft.create (size, CV_8UC1); /* Greyscale output image. */ in gst_skin_detect_set_caps()
275 filter->cvRGB.release (); in gst_skin_detect_finalize()
276 filter->cvChA.release (); in gst_skin_detect_finalize()
277 filter->cvHSV.release (); in gst_skin_detect_finalize()
278 filter->cvH.release (); in gst_skin_detect_finalize()
279 filter->cvH2.release (); in gst_skin_detect_finalize()
280 filter->cvS.release (); in gst_skin_detect_finalize()
281 filter->cvV.release (); in gst_skin_detect_finalize()
282 filter->cvSkinPixels1.release (); in gst_skin_detect_finalize()
283 filter->cvR.release (); in gst_skin_detect_finalize()
284 filter->cvG.release (); in gst_skin_detect_finalize()
285 filter->cvB.release (); in gst_skin_detect_finalize()
286 filter->cvAll.release (); in gst_skin_detect_finalize()
287 filter->cvR2.release (); in gst_skin_detect_finalize()
288 filter->cvRp.release (); in gst_skin_detect_finalize()
289 filter->cvGp.release (); in gst_skin_detect_finalize()
290 filter->cvRp2.release (); in gst_skin_detect_finalize()
291 filter->cvGp2.release (); in gst_skin_detect_finalize()
292 filter->cvdraft.release (); in gst_skin_detect_finalize()
293 filter->cvSkinPixels2.release (); in gst_skin_detect_finalize()
295 G_OBJECT_CLASS (gst_skin_detect_parent_class)->finalize (object); in gst_skin_detect_finalize()
305 filter->cvRGB = cv::Mat (img); in gst_skin_detect_transform()
308 if (HSV == filter->method) { in gst_skin_detect_transform()
309 cv::cvtColor (filter->cvRGB, filter->cvHSV, cv::COLOR_RGB2HSV); in gst_skin_detect_transform()
310 cv::split (filter->cvHSV, channels); in gst_skin_detect_transform()
311 filter->cvH = channels.at (0); in gst_skin_detect_transform()
312 filter->cvS = channels.at (1); in gst_skin_detect_transform()
313 filter->cvV = channels.at (2); in gst_skin_detect_transform()
317 …cv::threshold (filter->cvH, filter->cvH2, 10, UCHAR_MAX, cv::THRESH_BINARY); /* (hue > 10) … in gst_skin_detect_transform()
318 …cv::threshold (filter->cvH, filter->cvH, 20, UCHAR_MAX, cv::THRESH_BINARY_INV); /* (hue < 20) … in gst_skin_detect_transform()
319 cv::threshold (filter->cvS, filter->cvS, 48, UCHAR_MAX, cv::THRESH_BINARY); /* (sat > 48) */ in gst_skin_detect_transform()
320 cv::threshold (filter->cvV, filter->cvV, 80, UCHAR_MAX, cv::THRESH_BINARY); /* (val > 80) */ in gst_skin_detect_transform()
323 cv::erode (filter->cvH, filter->cvH, cv::Mat (), cv::Point (-1, -1), 1); in gst_skin_detect_transform()
327 … imageSkin = (hue > 10) ^ (hue < 20) ^ (sat > 48) ^ (val > 80), where ^ mean pixels-wise AND */ in gst_skin_detect_transform()
328 cv::bitwise_and (filter->cvH, filter->cvS, filter->cvSkinPixels1); in gst_skin_detect_transform()
329 cv::bitwise_and (filter->cvSkinPixels1, filter->cvH2, in gst_skin_detect_transform()
330 filter->cvSkinPixels1); in gst_skin_detect_transform()
331 cv::bitwise_and (filter->cvSkinPixels1, filter->cvV, filter->cvSkinPixels1); in gst_skin_detect_transform()
333 cv::cvtColor (filter->cvSkinPixels1, filter->cvRGB, cv::COLOR_GRAY2RGB); in gst_skin_detect_transform()
334 } else if (RGB == filter->method) { in gst_skin_detect_transform()
335 cv::split (filter->cvRGB, channels); in gst_skin_detect_transform()
336 filter->cvR = channels.at (0); in gst_skin_detect_transform()
337 filter->cvG = channels.at (1); in gst_skin_detect_transform()
338 filter->cvB = channels.at (2); in gst_skin_detect_transform()
339 cv::add (filter->cvR, filter->cvG, filter->cvAll); in gst_skin_detect_transform()
340 cv::add (filter->cvB, filter->cvAll, filter->cvAll); /* All = R + G + B */ in gst_skin_detect_transform()
341 …cv::divide (filter->cvR, filter->cvAll, filter->cvRp, 1.0, filter->cvRp.type ()); /* R' = R / (… in gst_skin_detect_transform()
342 …cv::divide (filter->cvG, filter->cvAll, filter->cvGp, 1.0, filter->cvGp.type ()); /* G' = G / (… in gst_skin_detect_transform()
344 filter->cvR.convertTo (filter->cvR2, filter->cvR2.type (), 1.0, 0.0); in gst_skin_detect_transform()
345 filter->cvGp.copyTo (filter->cvGp2); in gst_skin_detect_transform()
346 filter->cvRp.copyTo (filter->cvRp2); in gst_skin_detect_transform()
348 … cv::threshold (filter->cvR2, filter->cvR2, 60, UCHAR_MAX, cv::THRESH_BINARY); /* (R > 60) */ in gst_skin_detect_transform()
349 …cv::threshold (filter->cvRp, filter->cvRp, 0.42, UCHAR_MAX, cv::THRESH_BINARY); /* (R'> 0.4) */ in gst_skin_detect_transform()
350 …cv::threshold (filter->cvRp2, filter->cvRp2, 0.6, UCHAR_MAX, cv::THRESH_BINARY_INV); /* (R'… in gst_skin_detect_transform()
351 …cv::threshold (filter->cvGp, filter->cvGp, 0.28, UCHAR_MAX, cv::THRESH_BINARY); /* (G'> 0.28) … in gst_skin_detect_transform()
352 …cv::threshold (filter->cvGp2, filter->cvGp2, 0.4, UCHAR_MAX, cv::THRESH_BINARY_INV); /* (G'… in gst_skin_detect_transform()
357 cv::bitwise_and (filter->cvR2, filter->cvRp, filter->cvSkinPixels2); in gst_skin_detect_transform()
358 cv::bitwise_and (filter->cvRp, filter->cvSkinPixels2, in gst_skin_detect_transform()
359 filter->cvSkinPixels2); in gst_skin_detect_transform()
360 cv::bitwise_and (filter->cvRp2, filter->cvSkinPixels2, in gst_skin_detect_transform()
361 filter->cvSkinPixels2); in gst_skin_detect_transform()
362 cv::bitwise_and (filter->cvGp, filter->cvSkinPixels2, in gst_skin_detect_transform()
363 filter->cvSkinPixels2); in gst_skin_detect_transform()
364 cv::bitwise_and (filter->cvGp2, filter->cvSkinPixels2, in gst_skin_detect_transform()
365 filter->cvSkinPixels2); in gst_skin_detect_transform()
367 filter->cvSkinPixels2.convertTo (filter->cvdraft, filter->cvdraft.type (), in gst_skin_detect_transform()
369 cv::cvtColor (filter->cvdraft, filter->cvRGB, cv::COLOR_GRAY2RGB); in gst_skin_detect_transform()
373 filter->cvRGB. We can postprocess by applying 1 erode-dilate and 1 in gst_skin_detect_transform()
374 dilate-erode, or alternatively 1 opening-closing all together, with in gst_skin_detect_transform()
377 if (filter->postprocess) { in gst_skin_detect_transform()
378 cv::split (filter->cvRGB, channels); in gst_skin_detect_transform()
379 filter->cvChA = channels.at (0); in gst_skin_detect_transform()
384 cv::erode (filter->cvChA, filter->cvChA, element, cv::Point (1, 1), 1); in gst_skin_detect_transform()
385 cv::dilate (filter->cvChA, filter->cvChA, element, cv::Point (1, 1), 2); in gst_skin_detect_transform()
386 cv::erode (filter->cvChA, filter->cvChA, element, cv::Point (1, 1), 1); in gst_skin_detect_transform()
388 cv::cvtColor (filter->cvChA, filter->cvRGB, cv::COLOR_GRAY2RGB); in gst_skin_detect_transform()
391 filter->cvRGB.copyTo (outimg); in gst_skin_detect_transform()