vb.net의 이미지 비교
-
19-09-2019 - |
문제
이미지 비교 주제에 대해이 사이트의 많은 관련 게시물을 읽은 후 이미지가 '유사한'것인지 아닌지 확인하기 위해 각 이미지에서 PCA를 구현 해 보겠습니다. 내 이미지에서 데이터를 가져 오십시오 - 이미지를 이미지를 비교하기 위해 이미지를 바이트 등으로 변환하는 데 사용할 수있는 VB 기능이 있습니까? 또는 두 개의 이미지를 비교하는 간단한 방법 (검은 색과 흰색이어야하지만 스캔해야합니다. v. 작은 이미지).
대단히 감사합니다, 베키
해결책
또한, 다음은 유용한 기사입니다:이 사람은 두 개의 이미지를 가져 와서 비교 한 다음 두 이미지를 만들었습니다. 그것은 좋은 것 같습니다 동시성을 묘사하는 시각적 방법.
다른 팁
당신은 무언가를 사용할 수 있습니다 :
Public Class MyClass
Shared Sub Main(ByVal args() As String)
Byte() mydata = File.ReadAllBytes("C:\MyFile.jpg")
End Sub
End Class
그래서 이것이 제가 생각해 낸 것입니다. 픽셀을 개별적으로 비교하는 대신 파일 내용에서 공급 된 해싱 알고리즘을 사용했습니다. 그런 다음 리턴 된 해시의 개별 바이트를 비교합니다. 내 테스트에서는 회색 스케일 비트 맵 이미지 1152 X 720 및 101KB Big의 개별 픽셀을 비교하는 것보다 두 배 빠르게 돌아 왔습니다.
코드는 다음과 같습니다.
(코드를 처음 게시했을 때 모든 것이 이상하게 보였기 때문에 편집. 주석을 제거했습니다.)
Public Shared Function CompareTwoImageHashes(ByVal pathToFirstImage As String, ByVal pathToSecondImage As String) As Boolean
Dim firstImage As FileInfo = New FileInfo(pathToFirstImage)
Dim secondImage As FileInfo = New FileInfo(pathToSecondImage)
If Not firstImage.Exists Then
Throw New ArgumentNullException("pathToFirstImage", "The file referenced by the path does not exist!")
End If
If Not secondImage.Exists Then
Throw New ArgumentNullException("pathToSecondImage", "The file referenced by the path does not exist!")
End If
Dim hashingTool As SHA256Managed
Dim imagesMatch As Boolean = True
Try
Using firstImageStream As New FileStream(firstImage.FullName, FileMode.Open)
Using secondImageStream As New FileStream(secondImage.FullName, FileMode.Open)
hashingTool = SHA256Managed.Create()
Dim imageOneHash As Byte() = hashingTool.ComputeHash(firstImageStream)
Dim imageTwoHash As Byte() = hashingTool.ComputeHash(secondImageStream)
hashingTool.Clear()
If (imageOneHash.Length = imageTwoHash.Length) Then
For length As Integer = 0 To (imageOneHash.Length - 1)
If imageOneHash(length) <> imageTwoHash(length) Then
imagesMatch = False
Exit For
End If
Next
CompareTwoImageHashes = imagesMatch
Else
CompareTwoImageHashes = False
End If
End Using
End Using
Catch ex As Exception
Console.WriteLine("Error during compare: {0}", ex.Message)
End Try
End Function
이미지의 픽셀 데이터를 검색하기 위해; 당신은 사용할 수 있습니다 bitmap.getPixel 또는 bitmap.lockbits, 당신에게 줄 것입니다 BitMapData (링크 예제 코드가 있습니다) 대가로 수업.