int MicroDisplayControler::FreeRunning(MicroDisplayInit& mdi, BufferStorage& s) { //采集mdi.MaxPics行图像到缓存 if (MicroDisplayControler::StartGrabbing(mdi) < 0) { MD_ErrorMessageWait(mdi.fg); return -1; } frameindex_t lastPicNr = 0; cv::Mat OriginalImage; do{ lastPicNr = Fg_getLastPicNumberBlockingEx(mdi.fg, lastPicNr + 1, mdi.nCamPort, 100, mdi.pMem0); if (lastPicNr < 0){ int status = 0; MD_ErrorMessageWait(mdi.fg); Fg_stopAcquireEx(mdi.fg, mdi.nCamPort, mdi.pMem0, 0); Fg_FreeMemEx(mdi.fg, mdi.pMem0); Fg_FreeGrabber(mdi.fg); CloseDisplay(mdi.nId); return -1; } unsigned char *bytePtr = (unsigned char*)Fg_getImagePtrEx(mdi.fg, lastPicNr, 0, mdi.pMem0); if (mdi.nId != -1) ::DrawBuffer(mdi.nId, Fg_getImagePtrEx(mdi.fg, lastPicNr, 0, mdi.pMem0), (int)lastPicNr, ""); if (mdi.colorType == mdi.GRAY) OriginalImage = cv::Mat(mdi.height, mdi.width, CV_8U, bytePtr); else OriginalImage = cv::Mat(mdi.height, mdi.width, CV_8UC3, bytePtr); } while (!s.AddFrame(OriginalImage)); MicroDisplayControler::EndGrabbing(mdi); //功能主循环END return 0; }
void *Camera::getBuffer(){ try{ cur_pic_nr = Fg_getLastPicNumberBlockingEx(fg, last_pic_nr + 1, camPort, timeout, memHandle); if (cur_pic_nr < 0) { sprintf(Data,"Fg_getLastPicNumberBlockingEx(%li) failed: %s\n",last_pic_nr+1, Fg_getLastErrorDescription(fg)); // cout << "timeout: " << timeout << endl; stop(); throw string(Data); }else{ last_pic_nr = cur_pic_nr; // timeout=4; void *ImgPtr = Fg_getImagePtrEx(fg, last_pic_nr, camPort, memHandle); return ImgPtr; } }catch(string const& error){ cout <<"ERROR11: " << error << endl; sleep(5); timeout+= 100; cout << "timeouttest: " << timeout << endl; last_pic_nr = 0; init(m_file); startAcquire(); return getBuffer(); } }
int MicroDisplayControler::FreeRunningFocusing(MicroDisplayInit& mdi) { std::cout << "开始对焦,按1放大,按2缩小,按3退出。\r\n"; //采集mdi.MaxPics行图像到缓存 if (MicroDisplayControler::StartGrabbing(mdi) < 0) { MD_ErrorMessageWait(mdi.fg); return -1; } cv::Mat OriginalImage; int resize = mdi.width; frameindex_t lastPicNr = 0; cv::namedWindow("SHOW", CV_WINDOW_AUTOSIZE); int pos = 0; int realPos = 0; const int maxpos = 80; cv::createTrackbar("OFF SET / %", "SHOW", &pos, maxpos); do{ lastPicNr = Fg_getLastPicNumberBlockingEx(mdi.fg, lastPicNr + 1, mdi.nCamPort, 100, mdi.pMem0); if (lastPicNr < 0){ int status = 0; MD_ErrorMessageWait(mdi.fg); Fg_stopAcquireEx(mdi.fg, mdi.nCamPort, mdi.pMem0, 0); Fg_FreeMemEx(mdi.fg, mdi.pMem0); Fg_FreeGrabber(mdi.fg); CloseDisplay(mdi.nId); return 0; } unsigned char *bytePtr = (unsigned char*)Fg_getImagePtrEx(mdi.fg, lastPicNr, 0, mdi.pMem0); //if (mdi.nId != -1) // ::DrawBuffer(mdi.nId, Fg_getImagePtrEx(mdi.fg, lastPicNr, 0, mdi.pMem0), (int)lastPicNr, ""); if (mdi.colorType == mdi.GRAY) OriginalImage = cv::Mat(mdi.height, mdi.width, CV_8U, bytePtr); else OriginalImage = cv::Mat(mdi.height, mdi.width, CV_8UC3, bytePtr); if (resize != mdi.width) cv::resize(OriginalImage, OriginalImage, cv::Size(resize, mdi.height)); realPos = resize / 100 * pos; cv::Mat ROI = OriginalImage(cv::Rect(realPos, 0, resize - realPos, mdi.height)); cv::imshow("SHOW", ROI); char t = cv::waitKey(20); if (t == '3') break; if (t == '2' && resize > 800) resize /= 2; if (t == '1' && resize < mdi.width * 3) resize *= 2; } while (true); MicroDisplayControler::EndGrabbing(mdi); cv::destroyAllWindows(); //功能主循环END return 0; }
static int fg_callback(frameindex_t frame, struct fg_apc_data *apc) { UcaCamera *camera = UCA_CAMERA(apc); UcaPcoCameraPrivate *priv = UCA_PCO_CAMERA_GET_PRIVATE(camera); gpointer data = Fg_getImagePtrEx(priv->fg, frame, priv->fg_port, priv->fg_mem); if (priv->description->type != CAMERATYPE_PCO_EDGE) camera->grab_func(data, camera->user_data); else { pco_get_reorder_func(priv->pco)(priv->grab_buffer, data, priv->frame_width, priv->frame_height); camera->grab_func(priv->grab_buffer, camera->user_data); } return 0; }
cv::Mat E2VCameraDirectRead::GetImage() { if (HasBeenInited) { //acquire one image per subbuffer //1.fg //2.采集卡口 //3.采集帧数 //4.? //5.缓存地址 if ((Fg_AcquireEx(E2VCameraModel::fg, _camPort, 1, ACQ_STANDARD, memHandle)) < 0) { fprintf(stderr, "Fg_AcquireEx() failed: %s\n", Fg_getLastErrorDescription(fg)); errorMessageWait(); return cv::Mat(); } frameindex_t fcount = 0; frameindex_t last_pic_nr = 0; frameindex_t cur_pic_nr; cv::Mat OriginalImage; cur_pic_nr = Fg_getLastPicNumberBlockingEx(fg, last_pic_nr + 1, _camPort, 100, memHandle); if (cur_pic_nr < 0) { Fg_stopAcquire(fg, _camPort); errorMessageWait(); return cv::Mat(); } unsigned char *bytePtr = (unsigned char*)Fg_getImagePtrEx(fg, cur_pic_nr, 0, memHandle); //if (nId != -1) // ::DrawBuffer(nId, Fg_getImagePtrEx(fg, lastPicNr, 0, memHandle), (int)lastPicNr, ""); OriginalImage = cv::Mat(_frameHeight, _width, CV_8UC3, bytePtr).clone(); if (_colorType == GRAY) { cv::cvtColor(OriginalImage, OriginalImage, CV_BGR2GRAY); } fcount++; Fg_stopAcquireEx(fg, _camPort, memHandle, 0); return OriginalImage; } else return cv::Mat(); }
static gboolean uca_pco_camera_grab(UcaCamera *camera, gpointer data, GError **error) { static const gint MAX_TIMEOUT = 5; g_return_val_if_fail (UCA_IS_PCO_CAMERA(camera), FALSE); UcaPcoCameraPrivate *priv = UCA_PCO_CAMERA_GET_PRIVATE(camera); gboolean is_readout = FALSE; g_object_get(G_OBJECT(camera), "is-readout", &is_readout, NULL); if (is_readout) { if (priv->current_image == priv->num_recorded_images) return FALSE; /* * No joke, the pco firmware allows to read a range of images but * implements only reading single images ... */ pco_read_images(priv->pco, priv->active_segment, priv->current_image, priv->current_image); priv->current_image++; } pco_request_image(priv->pco); priv->last_frame = Fg_getLastPicNumberBlockingEx(priv->fg, priv->last_frame + 1, priv->fg_port, MAX_TIMEOUT, priv->fg_mem); if (priv->last_frame <= 0) { g_set_error (error, UCA_PCO_CAMERA_ERROR, UCA_PCO_CAMERA_ERROR_FG_GENERAL, "%s", Fg_getLastErrorDescription(priv->fg)); return FALSE; } guint16 *frame = Fg_getImagePtrEx(priv->fg, priv->last_frame, priv->fg_port, priv->fg_mem); if (priv->description->type == CAMERATYPE_PCO_EDGE) pco_get_reorder_func(priv->pco)((guint16 *) data, frame, priv->frame_width, priv->frame_height); else memcpy((gchar *) data, (gchar *) frame, priv->frame_width * priv->frame_height * priv->num_bytes); return TRUE; }