opencvsharp 直方圖(CalcHist)
單通道
Private Sub Print_Hint_1(ByVal Output As Mat, ByVal PictureBox As PictureBox)
Dim PrintOut As New Mat
Output.CopyTo(PrintOut)
Dim mats As Mat() = New Mat() {PrintOut}
Dim hist As Mat = New Mat()
Dim channels As Integer() = New Integer() {0}
Dim histsize As Integer() = New Integer() {256}
Dim range As Rangef() = {New Rangef(0.0F, 256.0F)}
Dim mask As Mat = New Mat()
Cv2.CalcHist(mats, channels, mask, hist, 1, histsize, range)
Dim color As Scalar() = New Scalar() {Scalar.Blue, Scalar.Green, Scalar.Red}
For i As Integer = 0 To 256 - 1
Dim len As Integer = CInt(((hist.Get(Of Single)(i) / 10000) * Output.Rows))
Cv2.Line(PrintOut, i, 0, i, len, Scalar.Black, 2)
Next
PictureBox.Image = BitmapConverter.ToBitmap(PrintOut)
End Sub
三通道
Private Sub Print_Hint_3(ByVal Output As Mat, ByVal PictureBox As PictureBox)
Dim PrintOut As New Mat
Output.CopyTo(PrintOut)
Dim mats As Mat() = Cv2.Split(PrintOut)
Dim mats0 As Mat() = New Mat() {mats(0)}
Dim mats1 As Mat() = New Mat() {mats(1)}
Dim mats2 As Mat() = New Mat() {mats(2)}
Dim hist As Mat() = New Mat() {New Mat(), New Mat(), New Mat()}
Dim channels As Integer() = New Integer() {0}
Dim histsize As Integer() = New Integer() {256}
Dim range As Rangef() = {New Rangef(0.0F, 256.0F)}
Dim mask As Mat = New Mat()
Cv2.CalcHist(mats0, channels, mask, hist(0), 1, histsize, range)
Cv2.CalcHist(mats1, channels, mask, hist(1), 1, histsize, range)
Cv2.CalcHist(mats2, channels, mask, hist(2), 1, histsize, range)
Dim color As Scalar() = New Scalar() {Scalar.Blue, Scalar.Green, Scalar.Red}
For i As Integer = 0 To 256 - 1
For j As Integer = 0 To 2
Dim len As Integer = CInt(((hist(j).Get(Of Single)(i) / 10000) * PrintOut.Rows))
Cv2.Line(PrintOut, i, 0, i, len, color(j), 2)
Next
Next
PictureBox.Image = BitmapConverter.ToBitmap(PrintOut)
End Sub
Private Sub Print_Hint_1(ByVal Output As Mat, ByVal PictureBox As PictureBox)
Dim PrintOut As New Mat
Output.CopyTo(PrintOut)
Dim mats As Mat() = New Mat() {PrintOut}
Dim hist As Mat = New Mat()
Dim channels As Integer() = New Integer() {0}
Dim histsize As Integer() = New Integer() {256}
Dim range As Rangef() = {New Rangef(0.0F, 256.0F)}
Dim mask As Mat = New Mat()
Cv2.CalcHist(mats, channels, mask, hist, 1, histsize, range)
Dim color As Scalar() = New Scalar() {Scalar.Blue, Scalar.Green, Scalar.Red}
For i As Integer = 0 To 256 - 1
Dim len As Integer = CInt(((hist.Get(Of Single)(i) / 10000) * Output.Rows))
Cv2.Line(PrintOut, i, 0, i, len, Scalar.Black, 2)
Next
PictureBox.Image = BitmapConverter.ToBitmap(PrintOut)
End Sub
三通道
Private Sub Print_Hint_3(ByVal Output As Mat, ByVal PictureBox As PictureBox)
Dim PrintOut As New Mat
Output.CopyTo(PrintOut)
Dim mats As Mat() = Cv2.Split(PrintOut)
Dim mats0 As Mat() = New Mat() {mats(0)}
Dim mats1 As Mat() = New Mat() {mats(1)}
Dim mats2 As Mat() = New Mat() {mats(2)}
Dim hist As Mat() = New Mat() {New Mat(), New Mat(), New Mat()}
Dim channels As Integer() = New Integer() {0}
Dim histsize As Integer() = New Integer() {256}
Dim range As Rangef() = {New Rangef(0.0F, 256.0F)}
Dim mask As Mat = New Mat()
Cv2.CalcHist(mats0, channels, mask, hist(0), 1, histsize, range)
Cv2.CalcHist(mats1, channels, mask, hist(1), 1, histsize, range)
Cv2.CalcHist(mats2, channels, mask, hist(2), 1, histsize, range)
Dim color As Scalar() = New Scalar() {Scalar.Blue, Scalar.Green, Scalar.Red}
For i As Integer = 0 To 256 - 1
For j As Integer = 0 To 2
Dim len As Integer = CInt(((hist(j).Get(Of Single)(i) / 10000) * PrintOut.Rows))
Cv2.Line(PrintOut, i, 0, i, len, color(j), 2)
Next
Next
PictureBox.Image = BitmapConverter.ToBitmap(PrintOut)
End Sub
留言
張貼留言