void Vision::get_array(int faces[6][9]) { Mat image0; Mat image1; Mat image2; Mat image3; Mat filtered, denoised; { VideoCapture cap0(0); //cap0.set(CV_CAP_PROP_BRIGHTNESS, CAMERA_BRIGHTNESS); //cap0.set(CV_CAP_PROP_CONTRAST, CAMERA_CONTRAST); cap0.set(CV_CAP_PROP_SATURATION, CAMERA_SATURATION); //cap0.set(CV_CAP_PROP_CONTRAST, CAMERA_CONTRAST); /* cap0.set(CV_CAP_PROP_BRIGHTNESS, CAMERA_BRIGHTNESS); cap0.set(CV_CAP_PROP_HUE, CAMERA_HUE); cap0.set(CV_CAP_PROP_GAIN, CAMERA_GAIN); cap0.set(CV_CAP_PROP_EXPOSURE, CAMERA_EXPOSURE); */ cap0 >> image0; //imshow("Image 0", image0); } { VideoCapture cap1(1); //cap1.set(CV_CAP_PROP_BRIGHTNESS, CAMERA_BRIGHTNESS); //cap1.set(CV_CAP_PROP_CONTRAST, CAMERA_CONTRAST); cap1.set(CV_CAP_PROP_SATURATION, CAMERA_SATURATION); /* cap1.set(CV_CAP_PROP_BRIGHTNESS, CAMERA_BRIGHTNESS); cap1.set(CV_CAP_PROP_CONTRAST, CAMERA_CONTRAST); cap1.set(CV_CAP_PROP_HUE, CAMERA_HUE); cap1.set(CV_CAP_PROP_GAIN, CAMERA_GAIN); cap1.set(CV_CAP_PROP_EXPOSURE, CAMERA_EXPOSURE); */ cap1 >> image1; //imshow("Image 1", image1); } { VideoCapture cap2(2); cap2.set(CV_CAP_PROP_SATURATION, CAMERA_SATURATION); //cap2.set(CV_CAP_PROP_BRIGHTNESS, CAMERA_BRIGHTNESS); //cap2.set(CV_CAP_PROP_CONTRAST, CAMERA_CONTRAST); /* cap2.set(CV_CAP_PROP_HUE, CAMERA_HUE); cap2.set(CV_CAP_PROP_GAIN, CAMERA_GAIN); cap2.set(CV_CAP_PROP_EXPOSURE, CAMERA_EXPOSURE); */ cap2 >> image2; /*imshow("Image 2", image2); bilateralFilter(image2, filtered, 3, 75, 75, BORDER_DEFAULT); imshow("Filtered", filtered); fastNlMeansDenoisingColored(filtered, denoised, 3, 10, 7, 21); imshow("Denoised", denoised);*/ } { VideoCapture cap3(3); //cap3.set(CV_CAP_PROP_BRIGHTNESS, CAMERA_BRIGHTNESS); //cap3.set(CV_CAP_PROP_CONTRAST, CAMERA_CONTRAST); cap3.set(CV_CAP_PROP_SATURATION, CAMERA_SATURATION); /* cap3.set(CV_CAP_PROP_HUE, CAMERA_HUE); cap3.set(CV_CAP_PROP_GAIN, CAMERA_GAIN); cap3.set(CV_CAP_PROP_EXPOSURE, CAMERA_EXPOSURE); */ cap3 >> image3; //imshow("Image 3", image3); // waitKey(1); } //all this stuff gets manually filled out std::cout <<"Image 0" << std::endl; faces[0][1] = assign_color( image0, 363, 62); faces[0][2] = assign_color( image0, 293, 94); faces[0][5] = assign_color( image0, 227, 58); faces[2][0] = assign_color( image0, 330, 156); faces[2][1] = assign_color( image0, 395, 114); faces[2][2] = assign_color( image0, 445, 85); faces[2][3] = assign_color( image0, 327, 235); faces[2][6] = assign_color( image0, 321, 293); faces[4][0] = assign_color( image0, 140, 94); faces[4][1] = assign_color( image0, 193, 119); faces[4][2] = assign_color( image0, 256, 156); faces[4][5] = assign_color( image0, 265, 237); faces[4][8] = assign_color( image0, 270, 294); /* std::cout <<"Image 0 Modified" << std::endl; faces[0][1] = assign_color( denoised, 363, 62, 0); faces[0][2] = assign_color( denoised, 293, 94, 0); faces[0][5] = assign_color( denoised, 227, 58, 0); faces[2][0] = assign_color( denoised, 330, 156, 0); faces[2][1] = assign_color( denoised, 395, 114, 0); faces[2][2] = assign_color( denoised, 445, 85, 0); faces[2][3] = assign_color( denoised, 327, 235, 0); faces[2][6] = assign_color( denoised, 321, 293, 0); faces[4][0] = assign_color( denoised, 140, 94, 0); faces[4][1] = assign_color( denoised, 193, 119, 0); faces[4][2] = assign_color( denoised, 256, 156, 0); faces[4][5] = assign_color( denoised, 265, 237, 0); faces[4][8] = assign_color( denoised, 270, 294, 0); */ std::cout << "Image 1" << std::endl; faces[3][0] = assign_color( image1, 313, 282 ); faces[3][1] = assign_color( image1, 319, 227 ); faces[3][2] = assign_color( image1, 324, 152); faces[3][5] = assign_color( image1, 388, 110); faces[3][8] = assign_color( image1, 441, 68); faces[4][3] = assign_color( image1, 216, 49); faces[4][6] = assign_color( image1, 286, 86); faces[4][7] = assign_color( image1, 358, 51); faces[5][2] = assign_color( image1, 138, 79 ); faces[5][5] = assign_color( image1, 187, 111 ); faces[5][6] = assign_color( image1, 259, 282 ); faces[5][7] = assign_color( image1, 257, 226 ); faces[5][8] = assign_color( image1, 250, 150); std::cout << "Image 2" << std::endl; faces[0][0] = assign_color( image2, 191, 13); faces[0][3] = assign_color( image2, 246, 47); faces[0][6] = assign_color( image2, 320, 81); faces[0][7] = assign_color( image2, 385, 45); faces[0][8] = assign_color( image2, 422, 19); faces[1][0] = assign_color( image2, 163, 73); faces[1][1] = assign_color( image2, 216, 111); faces[1][2] = assign_color( image2, 284, 149); faces[1][5] = assign_color( image2, 287, 224); faces[1][8] = assign_color( image2, 288, 278); faces[5][0] = assign_color( image2, 356, 148); faces[5][1] = assign_color( image2, 420, 103); faces[5][3] = assign_color( image2, 349, 224); std::cout << "Image 3" << std::endl; faces[1][3] = assign_color( image3, 219, 50); faces[1][6] = assign_color( image3, 291, 93 ); faces[1][7] = assign_color( image3, 360, 51 ); faces[2][5] = assign_color( image3, 182, 109 ); faces[2][7] = assign_color( image3, 249, 228 ); faces[2][8] = assign_color( image3, 252, 155 ); faces[3][3] = assign_color( image3, 385, 109 ); faces[3][6] = assign_color( image3, 324, 151 ); faces[3][7] = assign_color( image3, 313, 227 ); for (int v = 0; v < 6; v++) { faces[v][4] = v; } /* for (int d = 0; d < 6; d++) { for (int o = 0; o < 9; o++) { sum[ faces[d][o] ] += 1; } } for (int h = 0; h < 6; h++) { if (sum[h] != 9) { //std::cerr << "Color reading error..." << std::endl; } } */ }
int main(int argc, char * argv[]) { setlocale(LC_ALL, "Russian"); OpticalFlowMatrices of_matr; CameraParams cp; char command; int number_of_cams; puts("Проверка камер"); presets_aiming(); printf("Нужна ли калибровка? (y//n): "); scanf("%c", &command); bool calibration_needed = command == 'y'; printf("Введите число камер (1//2): "); scanf("%d", &number_of_cams); if (number_of_cams == 1) { if (calibration_needed) { //Проводим калибровку и записываем результаты в файл int board_width, board_height; puts("Введите размеры шахматной доски (число углов)"); printf("Ширина: "); scanf("%d", &board_width); printf("Высота: "); scanf("%d", &board_height); Size board_sz(board_width, board_height); cp = camera_calibration(board_sz); write_camera_calibration_to_file(cp); } else { //Читаем калибровку из файла read_camera_calibration_from_file(cp); } //Алгоритм оптического потока //Делаем фото с камер VideoCapture cap(0); Mat img0, img1; single_camera_aiming(cap); cap.read(img0); printf("Передвиньте камеру и нажмите любую клавишу"); single_camera_aiming(cap); cap.read(img1); //Находим оптический поток и строим облако точек Mat point_cloud = single_sfm(img0, img1, cp.CM, cp.D); //Сохраняем результаты в файл save_3d_to_file("[1]point_cloud.obj", point_cloud, "w"); } else if (number_of_cams == 2) { if (calibration_needed) { //Проводим калибровку и записываем результаты в файл int board_width, board_height; puts("Введите размеры шахматной доски (число углов)"); printf("Ширина: "); scanf("%d", &board_width); printf("Высота: "); scanf("%d", &board_height); Size board_sz(board_width, board_height); of_matr = stereo_calibration(board_sz); write_stereo_calibration_to_file(of_matr); } else { //Читаем калибровку из файла read_stereo_calibration_from_file(of_matr); } //Алгоритм оптического потока //Делаем фото с камер VideoCapture cap0(0); VideoCapture cap1(1); Mat img0, img1; aiming(cap0, cap1); cap0.read(img0); cap1.read(img1); //Находим оптический поток и строим облако точек Mat point_cloud = stereo_sfm(img0, img1, of_matr); //Сохраняем результаты в файл save_3d_to_file("[2]point_cloud.obj", point_cloud, "w"); } return 0; }