首先,還是談?wù)剤D像像素時數(shù)據(jù)獲取方面吧,.net中的圖像相關(guān)類基本上都是基于GDI+的,因此,圖像數(shù)據(jù)的獲取其實也是調(diào)用GDI+的一些函數(shù)。這個函數(shù)就是LockBits,在vb.net中彩色圖像數(shù)據(jù)的快速獲取 一文中,我們是調(diào)用了Marshal.Copy把LockBits鎖定的內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù)中,然后對數(shù)組中的值進行處理。這樣做主要的原因是VB.NET不好直接訪問內(nèi)存(Marshal.ReadByte之類的函數(shù)不適合用于大型的循環(huán)中)。那么,這就造成了2個不好的事情,第一:在同一時間需要2倍于圖像數(shù)據(jù)量的內(nèi)存,第二:內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù),以及處理后再把數(shù)組的數(shù)據(jù)拷貝會內(nèi)存中都是會減低速度的。作為一種改進,我們應(yīng)該充分利用LockBits的功能。LockBits中的LockMode中有一種模式為ImageLockMode.UserInputBuffer,該模式下需要用戶先申請內(nèi)存,然后在把圖像數(shù)據(jù)按照相關(guān)格式填充如這個內(nèi)存中。這樣,就可以先定義個數(shù)組,然后把圖像數(shù)據(jù)填充到這個數(shù)組中,就避免了來回拷貝的耗時了,簡單示例代碼如下:
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站制作、雙流網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、雙流網(wǎng)絡(luò)營銷、雙流企業(yè)策劃、雙流品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供雙流建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
Dim BmpData As New BitmapData
Stride = ((Bmp.Width * 3 + 3) And HFFFFFFFC)
Dim PixleValue(Stride * Bmp.Height) As Byte
Dim Hanlde As GCHandle = GCHandle.Alloc(PixleValue, GCHandleType.Pinned)
BmpData.Scan0 = Hanlde.AddrOfPinnedObject()
這問題有點籠統(tǒng),軟糖來說說把:
圖像處理由System.Drawing命名空間負責。
主要是Bitmap類和Graphics類。
Bitmap表示一個位圖,可以是BMP,JPG,PNG等文件。
裝載位圖
Dim?位圖?As?Bitmap?=?Bitmap.FromFile("C:\Image1.PNG")
Graphics表示一張畫紙,能夠進行繪制操作。
它可以被窗體、控件、位圖調(diào)用CreateGraphics()方法來創(chuàng)建。
然后調(diào)用Graphics.Draw開頭的一系列函數(shù)來繪制圖像和圖形,F(xiàn)ill開頭的填充圖形。
創(chuàng)建畫紙并繪制位圖
Dim?畫紙?As?Graphics?=?Me.CreateGraphics()
畫紙.DrawImage(位圖,?100,?100,?256,?256)
可以將上面三行放到Form1_Load中測試,把路徑改一下,
還可以把Me改為能在上面繪圖的控件的名稱。
更多內(nèi)容請看MSDN的System.Drawing命名空間。
如滿意,請采納,謝謝。
HALCON對于機器視覺的學習者、開發(fā)者而言并不陌生,稱其為機器視覺領(lǐng)域第一軟件,亦無可厚非。
HALCON對于視覺系統(tǒng)的控制、圖像的處理和分析都能夠較好的實現(xiàn),尤其是各種圖像處理算法。但就其本身而言,開發(fā)用戶界面并不理想。用戶界面以及對于其他底層的控制,比如和底層電路板、PLC等的控制和通信,可通過VC++、VB等進行開發(fā)。方便的是,HALCON恰恰能夠被這些開發(fā)工具所調(diào)用,它支持C、C++、VB、JAVA等等。
剛開始結(jié)合VC++結(jié)合HALCON進行學習和開發(fā)時,因為軟件方面的薄弱,對如何在VC++中如何調(diào)用HALCON感到不知所措,也在網(wǎng)上找了一些資料,資料較少,基本內(nèi)容相同,或許能用,但始終對于筆者個人而言不太靈光。后來在一位軟件同事的指導下,對其有了較為深刻的了解,其實說到底對軟件工程師而言這是一件很簡單的事,也就是將HALCON的庫導入VC++。
以下,針對初學者一步步介紹,以MFC作為開發(fā)工具。
在Visual Studio中新建項目選擇Visual C++下的MFC,其中的MFC應(yīng)用程序,建立過程不贅述。本文以Visual Studio 2005為例。
打開HALCON安裝目錄(以HALCON7.0為例,后面的版本也相同),如下圖1所示:
將其中的include文件夾整個拷貝至所建MFC項目工作目錄下,如下圖2所示:
同樣,將HALCON的LIB文件拷貝到所建MFC項目工作目錄下,因使用C++進行開發(fā),所以選擇X:Program FilesMVTecHALCONlibi586-nt4下的halconcpp.lib,這里X:為安裝盤符
打開stdafx.h,在文件中空白位置處,加入
#include "include/cpp/HalconCpp.h"
#prama comment(lib,"halconcpp.lib")
下一步,點擊項目下的屬性,如下圖6所示:
點開配置屬性中的C/C++,如下圖7所示:
當點在附加包含目錄右側(cè)空白框時,會出現(xiàn)的圖標,點開,如下圖8所示:
點擊新建行,將所建MFC項目工程目錄下的include文件夾的地址輸入,也就是剛才我們拷貝過去的那個文件夾
最后一步,在需要使用HALCON庫的地方,將其頭文件導入,以****Dlg.cpp為例
這樣我們就算成功在VC++/MFC中導入了HALCON庫文件,就可以調(diào)用HALCON的函數(shù),使用其強大的算法。另外,單純執(zhí)行上述步驟后,按F5啟動調(diào)試,應(yīng)該是不會有任何的ERROR和WARNING的。此方法同樣適用于VB,在此不贅述,VB的開發(fā)者可自行嘗試。
在access數(shù)據(jù)庫里將字段的類型設(shè)置為ole對象
Public img As Byte() '圖片處理用的字節(jié)數(shù)組
img=My.Computer.FileSystem.ReadAllBytes(filePath)'filePath是你圖片文件的路徑
剩下的就是數(shù)據(jù)庫插入操作了
Dim?cn?As?New?OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data?Source=Data.mdb")
Dim?comm?As?OleDb.OleDbCommand
comm?=?New?OleDb.OleDbCommand(?_
"INSERT?INTO?Photo(BuFan_F,PhotoNo,Photo)?Values('"??Me.CobBuFan.Text.Trim??"','"??Me.txtNo.Text.Trim??"',@image)",?cn)
'向數(shù)據(jù)庫添加存儲了圖片數(shù)據(jù)的二進制數(shù)組
comm.Parameters.Add("@image",?_
OleDb.OleDbType.Binary,?img.Length).Value?=?img
If?cn.State?=?ConnectionState.Closed?Then?cn.Open()?'打開數(shù)據(jù)庫連接
comm.ExecuteNonQuery()?'執(zhí)行數(shù)據(jù)庫命令
If?cn.State?=?ConnectionState.Open?Then?cn.Close()?'關(guān)閉數(shù)據(jù)庫連接
MessageBox.Show("圖片成功保存到數(shù)據(jù)庫",?"完成",?MessageBoxButtons.OK,?MessageBoxIcon.Information)