-
-
Save kevinhughes27/5543668 to your computer and use it in GitHub Desktop.
#include "FlyCapture2.h" | |
#include <opencv2/core/core.hpp> | |
#include <opencv2/highgui/highgui.hpp> | |
#include <iostream> | |
using namespace FlyCapture2; | |
int main() | |
{ | |
Error error; | |
Camera camera; | |
CameraInfo camInfo; | |
// Connect the camera | |
error = camera.Connect( 0 ); | |
if ( error != PGRERROR_OK ) | |
{ | |
std::cout << "Failed to connect to camera" << std::endl; | |
return false; | |
} | |
// Get the camera info and print it out | |
error = camera.GetCameraInfo( &camInfo ); | |
if ( error != PGRERROR_OK ) | |
{ | |
std::cout << "Failed to get camera info from camera" << std::endl; | |
return false; | |
} | |
std::cout << camInfo.vendorName << " " | |
<< camInfo.modelName << " " | |
<< camInfo.serialNumber << std::endl; | |
error = camera.StartCapture(); | |
if ( error == PGRERROR_ISOCH_BANDWIDTH_EXCEEDED ) | |
{ | |
std::cout << "Bandwidth exceeded" << std::endl; | |
return false; | |
} | |
else if ( error != PGRERROR_OK ) | |
{ | |
std::cout << "Failed to start image capture" << std::endl; | |
return false; | |
} | |
// capture loop | |
char key = 0; | |
while(key != 'q') | |
{ | |
// Get the image | |
Image rawImage; | |
Error error = camera.RetrieveBuffer( &rawImage ); | |
if ( error != PGRERROR_OK ) | |
{ | |
std::cout << "capture error" << std::endl; | |
continue; | |
} | |
// convert to rgb | |
Image rgbImage; | |
rawImage.Convert( FlyCapture2::PIXEL_FORMAT_BGR, &rgbImage ); | |
// convert to OpenCV Mat | |
unsigned int rowBytes = (double)rgbImage.GetReceivedDataSize()/(double)rgbImage.GetRows(); | |
cv::Mat image = cv::Mat(rgbImage.GetRows(), rgbImage.GetCols(), CV_8UC3, rgbImage.GetData(),rowBytes); | |
cv::imshow("image", image); | |
key = cv::waitKey(30); | |
} | |
error = camera.StopCapture(); | |
if ( error != PGRERROR_OK ) | |
{ | |
// This may fail when the camera was removed, so don't show | |
// an error message | |
} | |
camera.Disconnect(); | |
return 0; | |
} |
I get a segmentaion fault when calling
camera.StartCapture();
Does anyone know this issue?
Update:
this helped:
sudo sh -c 'echo 1000 > /sys/module/usbcore/parameters/usbfs_memory_mb'
How do I run this file? I tried adding the package to CMakeLists but I get the same errors as @vandanv. I tried the g++ option, i get g++: error: pkg-config: No such file or directory
Thanks!
Thank you for sharing the code. It took no time to interface, just like a plug and play.
@ashnarayan13 to run the file you need to make sure that you include headers and libs for flycapture and opencv. You can use for example:
g++ -std=c++11 mycppfile.cpp -I/usr/include/flycapture -lflycapture
`pkg-config --libs --cflags opencv`
-o mycppfile
Also, make sure FlyCaptureSDK is properly installed.
Thanks for the code Kevin. Do you (or anyone else) by any chance have any experience with the SetUserBuffers function from FlyCapture2? The documentation is quite scarce and I was wondering if the image.convert operation also uses the same buffer for the rgbimage in this case.
My program gets stuck in line 53 on "camera.RetrieveBuffer( &rawImage );"
But I don't get any error message . I tried to make a console output immediately after that call, but I don't receive anything.
Do you have an idea what the problem could be?
hi, when run the code, the image that grabbing is in Gray format not RGB? Anyone have same problem?
hey vandanv,
try: g++ -o balltrack balltrack.cpp
pkg-config opencv --cflags --libs
-L ../flycapture.2.9.3.43_armhf/lib -lflycaptureit is worked for me