導航:首頁 > 源碼編譯 > vb圖片二值化演算法

vb圖片二值化演算法

發布時間:2022-10-15 08:40:43

❶ 用VB對圖象進行黑白二值化處理的代碼。

我有一個笨辦法。
調用windows的「畫圖」打開圖片,然後「另存為」黑白模式。
這兩部都可以用vb實現。

❷ 如何用vb將圖片二值化

Option Explicit
Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim aaa As Long
Dim bbb As Byte
Dim i As Integer
Dim j As Integer
Private Sub Command1_Click()
For i = 1 To Picture1.ScaleHeight Step 15
For j = 1 To Picture1.ScaleWidth Step 15
aaa = Picture1.Point(j, i)
R = (aaa Mod 256) '取得紅色值
G = (aaa Mod 65536) \ 256 '取得綠色值
B = (aaa Mod 16777216) \ 65536 '取得藍色值
bbb = R / 3 + G / 3 + B / 3 '取得灰度值
If bbb >= 171 Then '這里bbb可作適當改變以獲得最佳2值化效果
Picture2.PSet (j, i), RGB(255, 255, 255)
Else
Picture2.PSet (j, i), RGB(0, 0, 0)
End If
Next j
Next i
End Sub

❸ 求圖像二值化演算法,給個具體思路就好,畢設用的

思路很簡單,就是深度高於某個值則是1,低於某個值則是0,具體這個值的取法,採用均方差最小計算,首先掃描整個圖片,確定亮度最高和最低點,分別作為1和0,然後從1和0中間依次按一個比較小的台階(例如先處理成256級灰度)依次作為二值化的分界,就是大於這個亮度的算1,小於的算0,然後計算所有點實際亮度與二值化以後的亮度的方差,依次遍歷計算所有的分界點,計算所有的方差和,取方差和最小的分界點作為最終的分界點。
這個演算法叫otsu演算法,有些不負責任的人,以訛傳訛寫成了ostu演算法。

❹ 關於VB.NET中圖像二值化中的閥值法是什麼意思呢

不要分
灰度圖像的像素的取值范圍為 0-255,0代表黑,255代表最亮,中間值是不同的亮度
圖像二值化,就是通過某個判斷標准,將灰度圖像變成只有兩個值的圖像,即圖像值不是0,就是255
閾值,就是這個判斷標准,比如,如果閾值取100,那麼圖像灰度小於等於100的像素,都變成0
圖像灰度大於100的,都變成255

❺ VB二值化代碼怎麼用

OptionExplicit

DimRAsByte

DimGAsByte

DimBAsByte

DimaaaAsLong

DimbbbAsByte

DimiAsInteger

DimjAsInteger

PrivateSubCommand1_Click()

Fori=1ToPicture1.ScaleHeightStep15

Forj=1ToPicture1.ScaleWidthStep15

aaa=Picture1.Point(j,i)

R=(aaaMod256)'取得紅色值

G=(aaaMod65536)256'取得綠色值

B=(aaaMod16777216)65536'取得藍色值

bbb=R/3+G/3+B/3'取得灰度值

Picture2.PSet(j,i),RGB(bbb,bbb,bbb)

Nextj

Nexti

EndSub

LZ:新建EXE工程,在窗體上分別添加2個PICTUREBOX,1個COMMAND控制項,在Picture1控制項設置其Picture屬性(即選一彩色圖片),執行Command1_Click,在Picture2中會出現無色彩的灰度圖.

❻ 如何用VB進行圖像識別

一般思路:
1、定時抓取圖象
2、對圖象進行灰度化,根據設定的閥值進行二值化
3、比較移動的像素數,根據標定計算距離(需要預先進行標定,即每個像素代表實際多少距離)

❼ vb 中一個菱形圖片,把圖片二值化後,想提取菱形4個點的坐標。

這個圖就這么小嗎?

❽ VB圖片二值化

RGB顏色值加回來,大於127*3判為白否則為黑。

❾ VB求灰度圖轉二值化,或者有直接二值化的代碼

用point方法太慢了,還是用api的getDIBits和setDIBits吧,彩圖轉灰度圖的代碼如下:

"gdi32"(ByValhBitmapAsLong,ByValdwCountAsLong,lpBitsAsAny)AsLong

"gdi32"(ByValhBitmapAsLong,ByValdwCountAsLong,lpBitsAsAny)AsLong

"gdi32"(ByValaHDCAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,lpBitsAsAny,lpBIAsBitMapInfo,ByValwUsageAsLong)AsLong

"gdi32"(ByValhdcAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,lpBitsAsAny,lpBIAsBitMapInfo,ByValwUsageAsLong)AsLong

PrivateTypeBitMapInfoHeader''文件信息頭——BITMAPINFOHEADER

biSizeAsLong

biWidthAsLong

biHeightAsLong

biPlanesAsInteger

biBitCountAsInteger

biCompressionAsLong

biSizeImageAsLong

biXPelsPerMeterAsLong

biYPelsPerMeterAsLong

biClrUsedAsLong

biClrImportantAsLong

EndType

PrivateTypeRGBQuad

rgbBlueAsByte

rgbGreenAsByte

rgbRedAsByte

''rgbReservedAsByte

EndType

PrivateTypeBitMapInfo

bmiHeaderAsBitMapInfoHeader

bmiColorsAsRGBQuad

EndType

PrivateSubCommand1_Click()

DimixAsInteger

DimiyAsInteger

DimiWidthAsInteger'以像素為單位的圖形寬度

DimiHeightAsInteger'以像素為單位的圖形高度

DimbytGrayAsByte

DimbytThresholdAsByte

Dimbits()AsByte'三維數組,用於獲取原彩色圖像中各像素的RGB數值以及存放轉化後的灰度值

DimbitsBW()AsByte'三維數組,用於存放轉化為黑白圖後各像素的值

'獲取圖形的寬度和高度

iWidth=Picture1.ScaleWidth/Screen.TwipsPerPixelX

iHeight=Picture1.ScaleHeight/Screen.TwipsPerPixelY

Picture1.Picture=Picture1.Image

'創建並初始化一個bitMapInfo自定義類型

Dimbi24BitInfoAsBitMapInfo

Withbi24BitInfo.bmiHeader

.biBitCount=32

.biCompression=0&

.biPlanes=1

.biSize=Len(bi24BitInfo.bmiHeader)

.biWidth=iWidth

.biHeight=Picture1.ScaleHeight/Screen.TwipsPerPixelY

EndWith

'重新定義數組大小

ReDimbits(3,0ToiWidth,0ToiHeight)AsByte

ReDimbitsBW(3,0ToiWidth,0ToiHeight)AsByte

'使用GetDIBits方法一次性獲取picture1中各點的rgb值,比point方法或getPixel函數逐像素獲取像素rgb要快出一個數量級

lrtn=GetDIBits(Picture1.hdc,Picture1.Picture.Handle,0&,iHeight,bits(0,0,0),bi24BitInfo,0&)

'數組的三個維度分別代表像素的RGB分量、以圖形左下角為原點的X和Y坐標。

'具體說來,這時bits(0,2,3)代表從圖形左下角數起橫向第2個縱向第3個像素的Blue值,而bits(1,2,3)和bits(2,2,3)分別的Green值和Red值.

bytThreshold=128'這里定義轉換為黑白圖像時的閾值為128,即灰色亮度大於128的像素轉為白色,小於128的像素轉為黑的,此值可根據需要修改為0-255之前任意數值

Forix=0ToiWidth

Foriy=0ToiHeight

'***********RGB轉為灰度的演算法有多種,這里給出常見的兩種*******

'bytGray=bits(0,ix,iy)*0.11+bits(1,ix,iy)*0.59+bits(2,ix,iy)*0.3'這是傳統的根據三原色亮度加權得到灰階的演算法

bytGray=(bits(0,ix,iy)^2.2*0.0722+bits(1,ix,iy)^2.2*0.7152+bits(2,ix,iy)^2.2*0.2126)^(1/2.2)'這是簡化sRGBIEC61966-2.1[gamma=2.20],有點類似於photoshop中所用的演算法

bits(0,ix,iy)=bytGray

bits(1,ix,iy)=bytGray

bits(2,ix,iy)=bytGray

'*********轉為黑白圖像********

Ifbits(0,ix,iy)<bytThresholdThen

bitsBW(0,ix,iy)=0

bitsBW(1,ix,iy)=0

bitsBW(2,ix,iy)=0

Else

bitsBW(0,ix,iy)=255

bitsBW(1,ix,iy)=255

bitsBW(2,ix,iy)=255

EndIf

Next

Next

'將灰度圖顯示到picture2中

Picture2.Picture=Picture2.Image'如果picture2的picture屬性為空,需要在setDIBits之前將其picture屬性設置一下,否則無法顯示出圖形

SetDIBitsPicture2.hdc,Picture2.Picture.Handle,0&,iHeight,bits(0,0,0),bi24BitInfo,0&

Picture2.Picture=Picture2.Image

'將黑白圖顯示到picture3中

Picture3.Picture=Picture3.Image

SetDIBitsPicture3.hdc,Picture3.Picture.Handle,0&,iHeight,bitsBW(0,0,0),bi24BitInfo,0&

Picture3.Picture=Picture3.Image

EndSub

代碼運行很快,如圖所示圖片基本可瞬間完成

閱讀全文

與vb圖片二值化演算法相關的資料

熱點內容
移動端微信商城源碼 瀏覽:438
編程貓下一個背景在哪裡 瀏覽:352
javaclasstype 瀏覽:232
樂高編程和樂高課的延伸 瀏覽:350
蘋果手機怎麼切換app美國賬號 瀏覽:861
編譯程序輸入一個字元串 瀏覽:407
圓命令畫法 瀏覽:308
如果給電腦e盤文件加密 瀏覽:801
javaswing項目 瀏覽:778
androidsdksetup 瀏覽:1005
pdf怎麼設置中文 瀏覽:128
安卓手機用什麼軟體看倫敦金 瀏覽:966
魅族文件夾無名稱 瀏覽:789
蘇黎世無人機演算法 瀏覽:872
核桃編程和小碼王的融資 瀏覽:686
微積分教材pdf 瀏覽:727
寫python給微信好友發消息 瀏覽:338
蚊帳自營米加密 瀏覽:422
學校推薦核桃編程 瀏覽:805
湖南農信app怎麼導明細 瀏覽:475