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

留言

這個網誌中的熱門文章

Raspberry Pi MySQL 重置密碼 忘記密碼

[VB.NET] ListView【新增】