Bạn có thể thực hiện việc này bằng cách sử dụng API genIcam. genIcam là một giao diện chung cho máy ảnh (USB, GigE, CameraLink, vv). Nó bao gồm nhiều mô-đun nhưng những gì bạn quan tâm nhất là GenTL (lớp vận chuyển). Bạn có thể đọc thêm về tài liệu GenTL HERE. Để làm cho quá trình dễ dàng hơn, tôi khuyên bạn nên sử dụng API Basler hoặc API Baumer, là những người tiêu dùng GenTL (nhà sản xuất và người tiêu dùng được mô tả trong tài liệu GenTL). Tôi đã sử dụng API Baumer, nhưng cả hai sẽ hoạt động.
LƯU Ý: Tôi đang sử dụng máy ảnh mono Baumer HXG20.
NHỮNG ĐIỀU download và cài đặt
- trực quan eddition Studios Cộng đồng (tôi đã sử dụng 2015 LINK)
- Baumer GAPI SDK, LINK
- OpenCV (đây là một hướng dẫn youtube để xây dựng OpenCV 3 cho C++) HERE
TEST CAMER A WITH CAMERA EXPLORER
Bạn nên kiểm tra xem card giao tiếp mạng (NIC) và máy ảnh GigE của bạn có đang hoạt động hay không bằng camera bằng cách sử dụng chương trình Camera Explorer. Bạn có thể cần phải kích hoạt gói Jumbo trên NIC của bạn. Bạn cũng có thể cấu hình IP camera bằng cách sử dụng chương trình IPconfig. Tôi sử dụng cài đặt DHCP nhưng bạn cũng có thể sử dụng IP tĩnh cho máy ảnh và NIC của mình.
SETUP STUDIOS VISUAL
Các bước để thiết lập biến môi trường hệ thống của bạn và cấu hình trực quan xưởng được mô tả trong hướng dẫn lập trình SDK Baumer GAPI (chương 4), được đặt trong thư mục sau
C:\Program Files\Baumer\Baumer GAPI SDK\Docs\Programmers_Guide
Kiểm tra xem bạn có các biến hệ thống sau (nếu sử dụng phiên bản 64 bit), hoặc tạo ra các biến nếu cần thiết (re fer đến phần 4.3.1 trong hướng dẫn của lập trình viên).
- name =
GENICAM_GENTL64_PATH
- value =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64\
trong Visual Studio, tạo một dự án mới ++ C và cập nhật các thuộc tính sau (xem phần 4.4.1 trong hướng dẫn của lập trình viên).
- C/C++> General> bổ sung bao gồm Thư mục =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Inc
- Linker> General> Thư mục Thư viện bổ sung =
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Dev\C++\Lib\x64
- Linker> Input> Dependencies bổ sung =
bgapi2_genicam.lib
- Build Sự kiện> Post-xây dựng tổ chức sự kiện > Dòng lệnh =
copy "C:\Program Files\Baumer\Baumer GAPI SDK\Components\Bin\x64"\*.* .\
tạo một file cpp để hiển thị IMAGE STREAM TRONG MỘT OpenCV WINDOW
Cách đơn giản nhất để bắt đầu là sử dụng một trong các mã ví dụ được cung cấp trong Baumer GAPI SDK và sửa đổi nó để thêm các chức năng OpenCV.Đoạn mã ví dụ để sử dụng là 005_PixelTransformation, mà nằm ở đây
C:\Program Files\Baumer\Baumer GAPI SDK\Components\Examples\C++\src\0_Common\005_PixelTransformation
Sao chép và dán tập tin cpp này vào thư mục nguồn dự án của bạn và chắc chắn rằng bạn có thể xây dựng và biên dịch. Nó sẽ chụp 8 ảnh và in ra 6 giá trị pixel đầu tiên từ 6 dòng đầu tiên cho mỗi ảnh.
Thêm những #include
báo cáo đến tập tin nguồn cpp:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\video\video.hpp>
Thêm các khai báo biến vào đầu của main()
chức năng
// OPENCV VARIABLE DECLARATIONS
cv::VideoWriter cvVideoCreator; // Create OpenCV video creator
cv::Mat openCvImage; // create an OpenCV image
cv::String videoFileName = "openCvVideo.avi"; // Define video filename
cv::Size frameSize = cv::Size(2048, 1088); // Define video frame size (frame width x height)
cvVideoCreator.open(videoFileName, CV_FOURCC('D', 'I', 'V', 'X'), 20, frameSize, true); // set the codec type and frame rate
Trong tập tin 005_PixelTransformation.cpp gốc, dòng 569 có vòng lặp for
lặp lại trên 8 hình ảnh, có nội dung là for(int i = 0; i < 8; i++)
. Chúng tôi muốn thay đổi điều này để chạy liên tục. Tôi đã làm điều này bằng cách thay đổi nó vào một vòng lặp while
nói rằng
while (pDataStream->GetIsGrabbing())
Trong while
vòng mới của chúng tôi, có một tuyên bố if
để kiểm tra nếu định dạng Pixel là 'Mono' (greyscale) hoặc màu sắc. Trong tệp gốc, nó bắt đầu tại dòng 619 và kết thúc tại 692. Ngay sau khi các dấu ngoặc đơn if
và else
được đóng và trước câu lệnh pImage->Release();
, chúng tôi cần thêm phần openCV để hiển thị hình ảnh vào cửa sổ. Thêm các dòng mã sau đây
} // This is the closing brace for the 'else color' statement
// OPEN CV STUFF
openCvImage = cv::Mat(pTransformImage->GetHeight(), pTransformImage->GetWidth(), CV_8U, (int *)pTransformImage->GetBuffer());
// create OpenCV window ----
cv::namedWindow("OpenCV window: Cam", CV_WINDOW_NORMAL);
//display the current image in the window ----
cv::imshow("OpenCV window : Cam", openCvImage);
cv::waitKey(1);
Một điều cần lưu ý là định dạng pixel trong đối tượng openCvImage
. Máy ảnh của tôi là một bit 8 bit, vì vậy tôi cần phải chỉ định CV_8U
. Nếu máy ảnh của bạn có pixel RGB hoặc 10 bit, bạn cần cung cấp định dạng đúng (xem tài liệu openCV HERE).
bạn có thể tham khảo các ví dụ khác để điều chỉnh thông số máy ảnh.
giờ đây khi bạn xây dựng và biên dịch, bạn nên mở một cửa sổ openCV hiển thị hình ảnh camera!
THUMPS LÊN ĐỂ NHIỀU THÊM LỜI NHIỀU NGƯỜI !!!! (Điều này mất rất nhiều thời gian để có được làm việc nên treo tôi lên !!!)
thể trùng lặp của [OpenCV với Mạng Máy ảnh] (http://stackoverflow.com/questions/712998/opencv-with-network-cameras) – karlphillip
Nó cũng là một trùng lặp có thể xảy ra [OpenCV với GigE Vision Máy ảnh] (http://stackoverflow.com/questions/3345467/opencv-with-gige-vision-cameras). – karlphillip
Cảm ơn, tôi đã nhận thấy nhận xét của bạn sau khi đăng cập nhật. Tôi sẽ xem xét các liên kết. – gpuguy