📄 skeleton.c
字号:
#include <stdio.h>#include <sys/param.h>#include <string.h>#include <tina/sys.h>#include <tina/sysfuncs.h>#include <tina/math.h>#include <tina/mathfuncs.h>#include <tina/vision.h>#include <tina/visionfuncs.h>#include <tina/file.h>#include <tina/filefuncs.h>#include <tina/file_gen.h>#include <tina/tv.h>#include <tina/tvfuncs.h>#include <tina/toolsfuncs.h>#include <tina/tw_Xfuncs.h>static int stereo_images = 1;/* interactive global variables for access via dialog box */static double sigma = 2.0;static double precision = 0.001;static void mono_skeleton_proc(void){ Tv *tv; Imrect *im; tv = mono_tv(); im = mono_image(); if (tv != NULL) /* get roi from tv */ im = im_subim(im, tv_get_im_roi(tv)); im = imf_grad_h(im); mono_image_set(im); tv_flush(tv);}void stereo_skeleton_proc(void){ Imrect *left_im=left_image_get(), *right_im=right_image_get(); Tv *tv; Imrect *im; Imrect *er; Vec2 ul, lr; Imregion *roi; Imrect *stored_left_corners(), *stored_right_corners(); if (left_im == NULL || right_im == NULL) return; tv = left_tv(); im = left_image(); if (tv != NULL) /* get roi from tv */ im = im_subim(im, tv_get_im_roi(tv)); im = imf_grad_h(im); left_image_set(im); tv_flush(tv); tv = right_tv(); im = right_image(); if (tv != NULL) /* get roi from tv */ im = im_subim(im, tv_get_im_roi(tv)); im = imf_grad_h(im); right_image_set(im); tv_flush(tv);}static void update_pcam(void){ Camera *lcam, *rcam; Parcam *pcam_get(); lcam = left_camera(); rcam = right_camera(); if (lcam == NULL || rcam == NULL) { error("no camera data", non_fatal); return; } pcam_set(parcam_make(lcam, rcam, CAMERA_PHYSICAL));}/**** Image choice callback ****/static void image_choice_proc(int value){ switch (value) { case 0: stereo_images = 1; break; case 1: stereo_images = 0; break; }}/** Pick function callbacks **/static void mono_pick_proc(Tv_pick(*func) ()){ tv_set_pick(mono_tv(), (*func) ()); tv_set_activity(mono_tv(), PICK);}static void left_pick_proc( Tv_pick(*func) ()){ tv_set_pick(left_tv(), (*func) ()); tv_set_activity(left_tv(), PICK);}static void right_pick_proc(Tv_pick(*func) ()){ tv_set_pick(right_tv(), (*func) ()); tv_set_activity(right_tv(), PICK);}/** Mouse function callbacks **/static void mono_mouse_proc(Tv_mouse(*func) ()){ tv_set_mouse(mono_tv(), (*func) ()); tv_set_activity(mono_tv(), MOUSE);}static void left_mouse_proc(Tv_mouse(*func) ()){ update_pcam(); tv_set_mouse(left_tv(), (*func) ()); tv_set_activity(left_tv(), MOUSE);}static void right_mouse_proc(Tv_mouse(*func) ()){ update_pcam(); tv_set_mouse(right_tv(), (*func) ()); tv_set_activity(right_tv(), MOUSE);}/*** Paramter dialog callbacks ***/static void skeleton_param_dialog(void){ static void *dialog = NULL; if (dialog) { tw_show_dialog(dialog); return; } dialog = tw_dialog("Skeleton Parameters"); tw_fglobal("sigma :", &sigma, 20); tw_newrow(); tw_fglobal("precision :", &precision, 20); tw_end_dialog();}/********** Tool creation **********/void skeleton_tool(int x, int y){ static void *tool = NULL; if (tool) { tw_show_tool(tool); return; } tool = (void *)tw_tool("Skeleton Tool", x, y); tw_menubar("Pick: ", "mono", "null", mono_pick_proc, null_pick, NULL, "left", "null", left_pick_proc, null_pick, NULL, "right", "null", right_pick_proc, null_pick, NULL, NULL); tw_label(" "); tw_help_button("skeleton"); tw_newrow(); tw_menubar("Mouse:", "mono", "null", mono_mouse_proc, null_mouse, NULL, "left", "null", left_mouse_proc, null_mouse, "epi", left_mouse_proc, left_epi_mouse, "rast", left_mouse_proc, left_raster_mouse, NULL, "right", "null", right_mouse_proc, null_mouse, "epi", right_mouse_proc, right_epi_mouse, "rast", right_mouse_proc, right_raster_mouse, NULL, NULL); tw_newrow(); tw_choice("Image Select:", image_choice_proc, 0, "stereo images", "mono image", NULL); tw_newrow(); tw_button("mono", mono_skeleton_proc, NULL); tw_button("stereo", stereo_skeleton_proc, NULL); tw_newrow(); tw_button("Skeleton Params", skeleton_param_dialog, NULL); tw_end_tool();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -