main

int main(/*const IplImage* image_l,const IplImage *image_r*/)
{
//assert(argc==3);
const char* left_filename="C:\\OpenCV2.1\\samples\\c\\scene_l.bmp";
const char* right_filename="C:\\OpenCV2.1\\samples\\c\\scene_r.bmp";
clock_t begin,end;
float time;
int count=0;
int i;
MIpoint *m=(MIpoint*)malloc(1000*sizeof(MIpoint));
FHParam param={4/*octaves*/,4/*intervals*/,2/*init_sample*/,0.0001f/*thres*/};/////////////参数设定
mImage *img_l;
mImage *img_r;
image_left = cvLoadImage(left_filename);
image_right = cvLoadImage(right_filename);

if (image_right==NULL || image_right==NULL) return -1;
CvSize image_size = cvGetSize(image_left);
img_l=ConvertIplImage(image_left);
img_r=ConvertIplImage(image_right);
begin=clock();
SurfImageMatch(img_l,img_r,&param,m,&count);
end=clock();
time=(float)(end-begin);
printf("time need:%gms\n",time);
CvMat* left_points_mat = cvCreateMat(count, 2, CV_32F);
CvMat* right_points_mat = cvCreateMat(count, 2, CV_32F);
for (i=0; i<count; ++i)
{
cvmSet(left_points_mat, i, 0, m[i].MIp1.x);
cvmSet(left_points_mat, i, 1, m[i].MIp1.y);
cvmSet(right_points_mat, i, 0, m[i].MIp2.x);
cvmSet(right_points_mat, i, 1, m[i].MIp2.y);
}

// 4. rectify
double _K[] = {800, 0, image_size.width/2, 0, 800, image_size.height/2, 0, 0, 1};
CvMat K = cvMat(3,3, CV_64F, _K);
// 4.1 Rotation and translation
double _rot[9], _tran[3], _R1[9], _R2[9], _P1[12], _P2[12], _F[9];
decompose_fundamental_matrix(_K, _F, _rot, _tran, left_points_mat, right_points_mat);

// 4.2 homography transform
stereo_rectify(_K, image_size, _rot, _tran, _R1, _R2, _P1, _P2);

CvMat R1 = cvMat(3,3, CV_64F, _R1);
CvMat R2 = cvMat(3,3, CV_64F, _R2);
CvMat P1 = cvMat(3,4, CV_64F, _P1);
CvMat P2 = cvMat(3,4, CV_64F, _P2);

// 5. warp images
double _KBig[] = {400, 0, image_size.width, 0, 400, image_size.height, 0, 0, 1};
CvSize bigsize = cvSize(image_size.width*2, image_size.height*2);
CvMat KBig = cvMat(3,3, CV_64F, _KBig);
CvMat* mx1 = cvCreateMat( image_size.height*2,
image_size.width*2, CV_32F );
CvMat* my1 = cvCreateMat( image_size.height*2,
image_size.width*2, CV_32F );
CvMat* mx2 = cvCreateMat( image_size.height*2,
image_size.width*2, CV_32F );
CvMat* my2 = cvCreateMat( image_size.height*2,
image_size.width*2, CV_32F );
cvInitUndistortRectifyMap(&K,NULL,&R1,&KBig,mx1,my1);
cvInitUndistortRectifyMap(&K,NULL,&R2,&KBig,mx2,my2);

IplImage* stereo_left = cvCreateImage(bigsize, 8, 3);
IplImage* stereo_right = cvCreateImage(bigsize, 8, 3);

cvRemap(image_left, stereo_left, mx1, my1);
cvRemap(image_right, stereo_right, mx2, my2);

cvSaveImage("stereo_left.jpg", stereo_left);
cvSaveImage("stereo_right.jpg", stereo_right);
//system("pause");
return 0;
}

转载于:https://www.cnblogs.com/mysunnyday/archive/2011/11/03/2234768.html

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <limits.h> #include <errno.h> #include "include/aip_common.h" #include "include/dynamic_array.h" #include "include/search_functions.h" #define BUFFER_SIZE 512 /*===================================================================================================================================*/ /* Function Name: v_s_main_print_int */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Prints an integer element from void pointer */ /* Arguments: VDP vdp_a_elem : Void pointer to integer element */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_print_int(VDP vdp_a_elem) { printf("%d", *(S4 *)vdp_a_elem); } /*===================================================================================================================================*/ /* Function Name: v_s_main_print_float */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Prints a float element from void pointer */ /* Arguments: VDP vdp_a_elem : Void pointer to float element */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_print_float(VDP vdp_a_elem) { printf("%.2f", *(float *)vdp_a_elem); } /*===================================================================================================================================*/ /* Function Name: v_s_main_print_char */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Prints a character element from void pointer */ /* Arguments: VDP vdp_a_elem : Void pointer to character element */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_print_char(VDP vdp_a_elem) { printf("'%c'", *(S1 *)vdp_a_elem); } /*===================================================================================================================================*/ /* Function Name: v_s_main_print_array */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Prints contents of dynamic array */ /* Arguments: const ST_DA_ARRAY *stp_a_arr : Pointer to dynamic array structure */ /* void (*vfp_a_print_element)(VDP) : Function pointer for element printing */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_print_array(const ST_DA_ARRAY *stp_a_arr, void (*vfp_a_print_element)(VDP)) { U4 u4_t_main_index; VDP vdp_t_main_elem; vdp_t_main_elem = NULL; printf("["); for (u4_t_main_index = U4_MIN; u4_t_main_index < stp_a_arr->u4_s_size; u4_t_main_index++) { vdp_t_main_elem = stp_a_arr->vdp_a_data + u4_t_main_index * stp_a_arr->u4_s_elem_size; vfp_a_print_element(vdp_t_main_elem); if (u4_t_main_index < stp_a_arr->u4_s_size - 1) { printf(", "); } } printf("]\n"); } /*===================================================================================================================================*/ /* Function Name: v_s_main_parse_int_array */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Parses integer input into dynamic array with validation */ /* Arguments: ST_DA_ARRAY *stp_a_arr : Pointer to dynamic array structure */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_parse_int_array(ST_DA_ARRAY *stp_a_arr) { S1 s1p_t_main_buffer[BUFFER_SIZE]; S1P s1p_t_main_token; U1 u1_t_main_valid_input = FALSE; S1P s1p_t_main_end; S4 s4_t_main_value; do { printf("Enter integers separated by spaces: "); if (fgets(s1p_t_main_buffer, BUFFER_SIZE, stdin) == NULL) { printf(" [!] Input error. Please try again.\n"); continue; } s1p_t_main_token = strtok(s1p_t_main_buffer, " "); u1_t_main_valid_input = FALSE; while (s1p_t_main_token != NULL) { s4_t_main_value = strtol(s1p_t_main_token, (char **)&s1p_t_main_end, 10); /* Validate integer input */ if (s1p_t_main_end == (S1P)s1p_t_main_token) { printf(" [!] Invalid integer: '%s'. Skipped.\n", s1p_t_main_token); } else if (*s1p_t_main_end != '\0' && *s1p_t_main_end != '\n') { printf(" [!] Trailing characters in '%s'. Using %d.\n", s1p_t_main_token, s4_t_main_value); } else if (s4_t_main_value > INT_MAX || s4_t_main_value < INT_MIN) { printf(" [!] Integer out of range: '%s'. Skipped.\n", s1p_t_main_token); } else { S4 s4_t_main_value = s4_t_main_value; v_g_da_push_back(stp_a_arr, &s4_t_main_value); u1_t_main_valid_input = TRUE; } s1p_t_main_token = strtok(NULL, " "); } if (!u1_t_main_valid_input) { printf(" [!] No valid integers entered. Please try again.\n"); } } while (!u1_t_main_valid_input); } /*===================================================================================================================================*/ /* Function Name: v_s_main_parse_float_array */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Parses float input into dynamic array with validation */ /* Arguments: ST_DA_ARRAY *stp_a_arr : Pointer to dynamic array structure */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_parse_float_array(ST_DA_ARRAY *stp_a_arr) { S1 s1p_t_main_buffer[BUFFER_SIZE]; U1P s1p_t_main_token; U1 u1_t_main_valid_input = FALSE; do { printf("Enter floating-point numbers separated by spaces: "); if (fgets(s1p_t_main_buffer, BUFFER_SIZE, stdin) == NULL) { printf(" [!] Input error. Please try again.\n"); continue; } s1p_t_main_token = strtok(s1p_t_main_buffer, " "); u1_t_main_valid_input = FALSE; while (s1p_t_main_token != NULL) { S1P s1p_t_main_end; float f_t_main_value = strtof(s1p_t_main_token, (char **)&s1p_t_main_end); /* 验证浮点数输入 */ if (s1p_t_main_end == (S1P)s1p_t_main_token) { printf(" [!] Invalid float: '%s'. Skipped.\n", s1p_t_main_token); } else if (*s1p_t_main_end != '\0' && *s1p_t_main_end != '\n') { printf(" [!] Trailing characters in '%s'. Using %.2f.\n", s1p_t_main_token, f_t_main_value); } else { v_g_da_push_back(stp_a_arr, &f_t_main_value); u1_t_main_valid_input = TRUE; } s1p_t_main_token = strtok(NULL, " "); } if (!u1_t_main_valid_input) { printf(" [!] No valid floats entered. Please try again.\n"); } } while (!u1_t_main_valid_input); } /*===================================================================================================================================*/ /* Function Name: v_s_main_parse_char_array */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Parses character input into dynamic array with validation */ /* Arguments: ST_DA_ARRAY *stp_a_arr : Pointer to dynamic array structure */ /* Return: void */ /*===================================================================================================================================*/ static void v_s_main_parse_char_array(ST_DA_ARRAY *stp_a_arr) { U1 s1p_t_main_buffer[BUFFER_SIZE]; U4 u4_t_main_index; U1 u1_t_main_valid_input = FALSE; do { printf("Enter characters without spaces: "); if (fgets((S1 *)s1p_t_main_buffer, BUFFER_SIZE, stdin) == NULL) { printf(" [!] Input error. Please try again.\n"); continue; } u1_t_main_valid_input = FALSE; for (u4_t_main_index = U4_MIN; u4_t_main_index < BUFFER_SIZE; u4_t_main_index++) { S1 s1_t_main_value = s1p_t_main_buffer[u4_t_main_index]; if (s1_t_main_value == '\n' || s1_t_main_value == '\0') { break; } if (s1_t_main_value != ' ') { // 排除空格 v_g_da_push_back(stp_a_arr, &s1_t_main_value); u1_t_main_valid_input = TRUE; } } if (!u1_t_main_valid_input) { printf(" [!] No valid characters entered. Please try again.\n"); } } while (!u1_t_main_valid_input); } /*===================================================================================================================================*/ /* Function Name: main */ /* --------------------------------------------------------------------------------------------------------------------------------- */ /* Description: Main program for dynamic array operations with enhanced robustness */ /* Arguments: void */ /* Return: S4 : Exit status */ /*===================================================================================================================================*/ S4 main(void) { S4 s4_t_main_choice = S4_MIN; U1 u1_t_main_exit_flag = FALSE; while (!u1_t_main_exit_flag) { printf("\n===== Dynamic Array Program =====\n"); printf("1. Integer Sorting and Binary Search\n"); printf("2. Float Sorting and Binary Search\n"); printf("3. Character Sorting and Binary Search\n"); printf("4. Exit Program\n"); printf("Please select an option (1-4): "); /* 增强菜单选择验证 */ if (scanf("%d", &s4_t_main_choice) != 1) { printf(" [!] Invalid input. Please enter a number.\n"); while (getchar() != '\n'); // 清除输入缓冲区 continue; } getchar(); // 消耗换行符 if (s4_t_main_choice == 4) { printf("Exiting program.\n"); u1_t_main_exit_flag = TRUE; continue; } if (s4_t_main_choice < 1 || s4_t_main_choice > 3) { printf(" [!] Invalid choice. Please select 1-4.\n"); continue; } ST_DA_ARRAY st_t_main_array; void (*vfp_t_main_print_element)(VDP) = NULL; S4 (*s4fp_t_main_compare)(const VDP, const VDP) = NULL; void (*vfp_t_main_parse_array)(ST_DA_ARRAY *) = NULL; U1 u1_t_main_found = FALSE; U1 s1p_t_main_buffer[BUFFER_SIZE]; switch (s4_t_main_choice) { case 1: v_g_da_init(&st_t_main_array, sizeof(S4)); vfp_t_main_print_element = v_s_main_print_int; s4fp_t_main_compare = s4_g_comp_int; vfp_t_main_parse_array = v_s_main_parse_int_array; break; case 2: v_g_da_init(&st_t_main_array, sizeof(float)); vfp_t_main_print_element = v_s_main_print_float; s4fp_t_main_compare = s4_g_comp_float; vfp_t_main_parse_array = v_s_main_parse_float_array; break; case 3: v_g_da_init(&st_t_main_array, sizeof(S1)); vfp_t_main_print_element = v_s_main_print_char; s4fp_t_main_compare = s4_g_comp_char; vfp_t_main_parse_array = v_s_main_parse_char_array; break; default: printf(" [!] Invalid choice. Please select a valid option.\n"); continue; } vfp_t_main_parse_array(&st_t_main_array); /* 空数组检查 */ if (st_t_main_array.u4_s_size == 0) { printf(" [!] Array is empty. Operation skipped.\n"); v_g_da_free(&st_t_main_array); continue; } printf("Original array: "); v_s_main_print_array(&st_t_main_array, vfp_t_main_print_element); printf("Sorting the array...\n"); v_g_da_bubble_sort(&st_t_main_array, s4fp_t_main_compare); printf("Sorted array: "); v_s_main_print_array(&st_t_main_array, vfp_t_main_print_element); /* 增强搜索值输入验证 */ U1 u1_t_main_valid_search = FALSE; do { printf("Enter the value to search: "); if (fgets((S1 *)s1p_t_main_buffer, BUFFER_SIZE, stdin) == NULL) { printf(" [!] Input error. Please try again.\n"); continue; } if (s4_t_main_choice == 1) { S1P s1p_t_main_end; U8 l_t_main_target = strtol(s1p_t_main_buffer, (char **)s1p_t_main_end, 10); if (s1p_t_main_end != (S1P)s1p_t_main_buffer && (*s1p_t_main_end == '\n' || *s1p_t_main_end == '\0')) { S4 s4_t_main_target = (S4)l_t_main_target; u1_t_main_found = u4_g_search_binary(&st_t_main_array, &s4_t_main_target, s4fp_t_main_compare); u1_t_main_valid_search = TRUE; } else { printf(" [!] Invalid integer. Please try again.\n"); } } else if (s4_t_main_choice == 2) { S1P s1p_t_main_end; float f_t_main_target = strtof(s1p_t_main_buffer, (char **)s1p_t_main_end); if (s1p_t_main_end != (S1P)s1p_t_main_buffer && (*s1p_t_main_end == '\n' || *s1p_t_main_end == '\0')) { u1_t_main_found = u4_g_search_binary(&st_t_main_array, &f_t_main_target, s4fp_t_main_compare); u1_t_main_valid_search = TRUE; } else { printf(" [!] Invalid float. Please try again.\n"); } } else if (s4_t_main_choice == 3) { if (strlen((S1 *)s1p_t_main_buffer) > 1 && s1p_t_main_buffer[1] != '\n') { printf(" [!] Only single character allowed. Using first character.\n"); } S1 s1_t_main_target = s1p_t_main_buffer[0]; u1_t_main_found = u4_g_search_binary(&st_t_main_array, &s1_t_main_target, s4fp_t_main_compare); u1_t_main_valid_search = TRUE; } } while (!u1_t_main_valid_search); if (u1_t_main_found) { printf("Value found in the array!\n"); } else { printf("Value not found in the array.\n"); } v_g_da_free(&st_t_main_array); } return 0; } ===== Dynamic Array Program ===== 1. Integer Sorting and Binary Search 2. Float Sorting and Binary Search 3. Character Sorting and Binary Search 4. Exit Program Please select an option (1-4): 1 Enter integers separated by spaces: 5 Original array: [0] Sorting the array... Sorted array: [0] Enter the value to search:
09-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值