MFC呼叫HALCON實現相機採圖和影象顯示
一、相機採圖
1、查詢裝置資訊
HTuple Information, Values;
info_framegrabber("GigEVision", "device", &Information, &Values);
Information用來獲取相機資訊
Values用來獲取相機名稱
2、開啟相機
HTuple m_hFrameGrabber; //相機控制代碼
open_framegrabber("GigEVision",0,0,0,0,0,0,"progressive",-1,"default",
-1,"false","default",Values[0],0,-1,&m_hFrameGrabber);
開啟第二個相機
open_framegrabber("GigEVision",0,0,0,0,0,0,"progressive",-1,"default",
-1,"false","default",Values[1],0,-1,&m_hFrameGrabber);
注意相機名的呼叫方法。
3、獲取相機引數
HTuple m_ImageWidth;get_framegrabber_param(m_hFrameGrabber,"m_ImageWidth",&m_ImageWidth);
4、單幀抓取
Hobject * pImage; //圖片指標
grab_image(pImage,m_hFrameGrabber);
由於grab_image函式不能中斷執行,因此在多執行緒中呼叫時,需要注意對它的原子保護。
5、關閉相機
close_framegrabber(m_hFrameGrabber);
二、影象顯示
1、抓取單幀影象
m_Camera.SingleGrab(GetImage());
2、顯示圖片
CHalconBase::uShowImageOrSize(GetMyHalconWnd(),GetImage());
注:
1)獲取顯示視窗控制代碼GetMyHalconWnd()
2)獲取圖片指標GetImage()
3)顯示函式原型
void CHalconBase::uShowImageOrSize(HTuple* WindowsHandle,Hobject* obj)
{
if(NULL == WindowsHandle || NULL ==obj)return;
else
{
if((long*)1 == obj->Id())return;
Hlong Width,Height;
get_image_size(*obj,&Width,&Height);
set_part(*WindowHandle,0,0,Height-1,Width-1);
disp_obj(*obj,*WindowsHandle);
}
}
三、模板選取 1)影象選取操作 stDoubleRect CHalconBase::uDrawRectangle(HTuple* WindowHandle,char* strColor) { uSetColor(WindowHandle,strColor); //顏色選取 stDoubleRect m_stTempRect; //畫矩形 Halcon::draw_rectangle1(*WindowHandle,&(m_stTempRect.Row1),&(m_stTempRect.Col1), &(m_stTempRect.Row2),&(m_stTempRect.Col2)); return m_stTempRect; } //生成矩形框 gen_rectangle1(); //顏色變更並顯示 set_color(*WinowHandle,strColorObj); disp_opj(*obj,*WinowHandle); 出現問題: 矩形框不能正常畫出。 問題原因: 影象拷貝出現問題,圖片不能簡單賦值,需要呼叫copy_image。 2)相機實時採圖顯示 相機採圖和相機顯示可以採用兩個獨立的執行緒來分別處理,可以提高執行效率。 但是需要注意,影象快取,如果兩個執行緒同時去處理共享儲存區,會出現不一些 不可預知的問題,比如halcon影象顯示函式disp_obj()會卡死,或者disp_obj操作 會報儲存空間不夠的錯誤。 問題解決: 可以採用採圖執行緒主動詢問的方式,當採圖執行緒才到一幅圖後,去查詢如果需要 顯示採圖執行緒可以主動拷貝一份圖片到顯示執行緒的圖片操作緩衝(即圖片拷貝),這樣 就避免了兩個執行緒同時同一片共享儲存區的問題。 3)實時刷圖執行緒 實時刷圖執行緒需要做的工作就是抓取一幅圖和顯示一幅圖。但是抓圖要考慮對影象緩衝區的多執行緒操作保護,實際在處理方式上是設定標誌位,被動獲取。 遇到問題:
刷圖執行緒如果在顯示圖片即呼叫disp_obj(),如果主執行緒也進如刷圖函式段disp_obj()或者 視窗繫結函式段open_window(),會發生卡死的情況。 問題解決:
1、降低刷圖執行緒刷圖頻率,比如抓10次圖才顯示一次。
2、停掉實時刷圖執行緒,注意停掉的方式,不能採用掛起的方式,這樣執行緒中斷的位置不確定, 可能在不允許中斷的位置中斷了,比如正在寫影象緩衝的時候;可以採用執行緒狀態標識判斷的 方式,每天執行緒執行完一遍都會判斷執行緒狀態,如果是空閒態,改執行緒將空跑,不去執行實際 內容。採用這種方式將刷圖執行緒停掉。 3、採圖執行緒不採用被動等待標誌查尋的方式,可以採用等待事件通知的方式。因為前者容易 造成共享標誌位頻繁訪問。
相關推薦
MFC呼叫HALCON實現相機採圖和影象顯示
一、相機採圖 1、查詢裝置資訊 HTuple Information, Values; info_framegrabber("GigEVision", "device", &Information, &Values); Information用來獲取相機資訊
VS2010-MFC(文檔、視圖和框架:概述)
position runt mfc href ext 必須 eal 應用 指向 轉自:http://www.jizhuomi.com/software/221.html 前面幾節講了菜單、工具欄和狀態欄的使用,本節開始將為大家講解文檔、視圖和框架的知識。
C語言利用圖的鄰接矩陣的儲存方式實現有向圖和無向圖的深度優先搜尋(DFS)
C語言利用圖的鄰接矩陣的儲存方式實現有向圖和無向圖的深度優先搜尋(DFS) Description 圖採用鄰接矩陣儲存,圖中頂點數為n(0<n<20),頂點資訊為整數,依次為0,1,..,n-1。 編寫函式,輸入圖的型別,0:無向圖,1:有向圖;輸入圖的頂點數、邊數、邊的偶對
C語言利用圖的鄰接矩陣的儲存方式實現有向圖和無向圖的廣度優先搜尋(BFS)
#include <stdio.h> #include <stdlib.h> #define Max_Vetex_Num 100 #define MAXSIZE 20 #define STACK_SIZE 30 typedef struct { int vexs[M
Java呼叫phantomJs實現網頁截圖功能
轉:http://www.cnblogs.com/han108/p/9216583.html 這篇文章寫得很好, 我自己補充了一下,內含安裝包比較全 1.首先介紹一下環境 java環境不用多說,jdk1.7 + phantomJs-2.1.1 2.安裝包資源:https
詳解vue之better-scroll實現輪播圖和頁面滾動
(該方法只針對移動端使用效果較好,PC端不推薦,使用的版本是[email protected],其他版本會出錯) 1.安裝better-scroll 在根目錄中package.json的dependencies中新增: "better-scr
Matplotlib庫擴充套件之Seaborn實現柱狀圖和熱力圖
第一步:匯入所需庫 import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas import Series, DataFrame %matplotlib inline
[原始碼和報告分享] VC++實現的支援攝像頭和影象的人臉識別系統
人臉識別因其在安全驗證系統、信用卡驗證、醫學、檔案管理、視訊會議、人機互動、系統公安(罪犯識別等)等方面的巨大應用前景而越來越成為當前模式識別和人工智慧領域的一個研究熱點。 本文提出了基於24位彩色影象對人臉進行識別的方法,介紹的主要內容是影象處理,它在整個軟體中佔有極其重要的地位,影象處理的好
Tiny6410與RFID讀卡器通訊,並實現LED模擬控制和QT顯示(階段總結)
本裝置現階段實現的基本功能如下:(1)RFID讀卡器接收到便籤資訊並通過串列埠傳送給6410開發板,6410根據《XSS協議》對資料進行封裝,其作為tcp client通過socket 與伺服器進行通訊,這類6410只是將串列埠資料轉發給網口,只是一個單向的通訊過程。(2
【java】mysql+springMvc+easyui實現圖片的儲存和讀取顯示
需求描述 公司之前設計的稽核流程,稽核人一欄使用的是文字資訊。現根據甲方最新需求,在列印審批單時,需要在稽核人一欄顯示手寫簽名。 設計思路 設計獨立的簽名儲存模組 將使用者與簽名圖片進行關聯 將圖片資訊以blob型別儲存在資料庫中(因為本次需要儲存的
Python量化分析—指數基金定投及Matplotlib作圖: 實現雙Y軸和中文顯示
pandas指數基金定投策略 1.pd.read_csv中的index_col表示將交易日期這一列指定為index索引,parse_dates表示將某一column(通常包含時間資料資訊)解析為時間列,以便將輸入的字串轉換為可變的的時間序列;做時間序列資料分析
初識視覺SLAM:用相機解決定位和建圖問題
視覺slam引言:視覺SLAM 是指用相機解決定位和建圖問題。本文以一個小機器人為例形象地介紹了視覺SLAM的功能及特點。本文選自《視覺SLAM十四講:從理論到實踐》。 SLAM 是Simultaneous Localization and Mapping 的縮寫,中文譯作“同時定位與地圖構建”。它是指搭載
用 php 實現一個視圖組件和模板引擎——基礎
view content 如何實現 目前 內容 復用 tty 結構 有效 只要不是做後端接口開發和一些作為守護進程之類的服務器腳本,大多數時候都是在和瀏覽器打交道,因此合理組織並展現 html 標簽是最為常見的工作。一般大家使用框架時,都會自帶有一套視圖組件和模板引擎。
img標簽實現和背景圖一樣的顯示效果——object-fit和object-positon
ont fit cover 一個 width none ack 都是 簡單 不知大家在做前端頁面的時候,有沒有遇到類似這樣的問題:有一個不是正方形的圖片,可能是寬度大於高度的,也可能是高度大於寬度的,而你又並不想用背景圖的方式來做,要實現用img標簽來讓此圖片顯示出一個正方
微信小程序之輪播圖的實現(附效果圖和源碼)
class git 源代碼 nload car 源碼 github項目 小程序 swiper 不管是做APP開發還是小程序,移動端離不開輪播圖的功能,下面就寫一個小程序的輪播圖功能分享給大家 效果圖: step1:頁面index.wxml代碼 <!--index.w
詳解swiper輪播圖的各種坑以及呼叫ajax實現輪播效果
Swiper常用於移動端網站的內容觸控滑動,對於前端開發人員來說使用swiper可以提高工作效率,不再需要寫太多的程式碼,輕輕鬆鬆的實現想要的效果,工作中最常用的就是輪播圖了,下面我來說說如何寫一個簡單的輪播圖: 1、首先需要下載一個swiper.css檔案和一個swiper.js檔案,到時候直
echarts 柱狀圖的選中模式實現-被選中變色和再次選中為取消變色
title sele alt hang arc 技術 etop code mage 方法: 1 function barCharShow(curr_dim,divId,result_data){ 2 mutilDim(curr_dim);//維度信息 3
MFC子對話方塊呼叫主對話方塊的變數和函式
1、在子對話方塊中定義主對話方塊的物件指標: CSensorSysDlg *parent = (CSensorSysDlg*)GetParent();//CSensorSysDlg是主對話方塊對應的類 2、呼叫 //呼叫變數 parent->i;//i是主對話方塊內int型別的
一種JavaScript類繼承和super方法呼叫的實現
在設計實現一種Java、Objective-C與JavaScript混合程式設計的程式設計風格JSAppSugar時,需要 JavaScript 語言支援類導向的程式設計風格,然而JavaScript本身是原型導向(Prototype-based)的,因此在JavaScript中也有很多種實現類繼承
[原始碼和文件分享]基於Qt和OpenCV實現彩色圖和灰度圖的轉換
一、實驗目的與要求 1.1 目的 熟悉Qt視覺化開發,理解C++的面向物件思想 熟悉Qt和Opencv開發環境搭建 瞭解Qt訊息機制 初步理解Opencv的用法 學會使用c++異常處理 1.2 要求 使用Qt編寫一程式,點