M2_SETI/A4/TP_GPU-master/TP5_computer-vision/main_nano.cu
2022-12-09 09:03:22 +01:00

92 lines
2.3 KiB
Text

#include "mylib.cuh"
#include "mylib.h"
#include <cuda_runtime.h>
// acces au flux de la camera
std::string gstreamer_pipeline(int capture_width, int capture_height,
int display_width, int display_height,
int framerate, int flip_method) {
return "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=(int)" +
std::to_string(capture_width) + ", height=(int)" +
std::to_string(capture_height) +
", format=(string)NV12, framerate=(fraction)" +
std::to_string(framerate) +
"/1 ! nvvidconv flip-method=" + std::to_string(flip_method) +
" ! video/x-raw, width=(int)" + std::to_string(display_width) +
", height=(int)" + std::to_string(display_height) +
", format=(string)BGRx ! videoconvert ! video/x-raw, "
"format=(string)BGR ! appsink";
}
int main(int, char **) {
int capture_width = 1280;
int capture_height = 720;
int display_width = 640;
int display_height = 360;
int framerate = 60;
int flip_method = 0;
char c = '1';
std::string pipeline =
gstreamer_pipeline(capture_width, capture_height, display_width,
display_height, framerate, flip_method);
std::cout << "Using pipeline: \n\t" << pipeline << "\n";
cv::VideoCapture cap(pipeline, cv::CAP_GSTREAMER);
if (!cap.isOpened()) // check if we succeeded
return -1;
while (1) {
Mat frame;
cap >> frame;
int c_new;
c_new = cv::waitKey(10);
if (c_new != -1)
c = c_new;
switch (c) {
case '1': {
imshow("frame", frame);
break;
}
case '2': {
Mat NB = noirBlanc(frame);
imshow("NoirEtBlanc", NB);
break;
}
case '3': {
Mat seuil = seuillage(frame);
imshow("seuillage", seuil);
break;
}
case '4': {
Mat cont = contour(frame);
imshow("contour", cont);
break;
}
case '5': {
Mat seuilgpu = seuillageGPU(frame);
imshow("seuillage GPU", seuilgpu);
break;
}
case '0': {
destroyAllWindows();
break;
}
default:
break;
}
if (c == '\e')
break;
}
// When everything done, release the video capture object
cap.release();
// Closes all the frames
destroyAllWindows();
return 0;
}