Java OpenCV 라이브러리를 사용하여 두 이미지를 비교하는 방법은 무엇입니까?
두 개의 이미지 비교 -
Image.IO.read() 메서드를 사용하여 읽습니다.
둘의 높이와 너비를 구하고 동일한지 확인하세요.
픽셀 값을 가져오고 두 이미지의 RGB 값을 가져옵니다.
-
이 두 이미지의 RGB 값 차이의 합을 구하세요.
li> 다음 공식을 사용하여 차이의 백분율을 계산합니다. -
Average = difference/weight*height*3; Percentage = (Average/255)*100;
Example
import java.awt.Color; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; public class ComparingImages { public static void main(String[] args) throws Exception { BufferedImage img1 = ImageIO.read(new File("D:\Images\test1.jpg")); BufferedImage img2 = ImageIO.read(new File("D:\Images\test2.jpg")); int w1 = img1.getWidth(); int w2 = img2.getWidth(); int h1 = img1.getHeight(); int h2 = img2.getHeight(); if ((w1!=w2)||(h1!=h2)) { System.out.println("Both images should have same dimwnsions"); } else { long diff = 0; for (int j = 0; j < h1; j++) { for (int i = 0; i < w1; i++) { //Getting the RGB values of a pixel int pixel1 = img1.getRGB(i, j); Color color1 = new Color(pixel1, true); int r1 = color1.getRed(); int g1 = color1.getGreen(); int b1 = color1.getBlue(); int pixel2 = img2.getRGB(i, j); Color color2 = new Color(pixel2, true); int r2 = color2.getRed(); int g2 = color2.getGreen(); int b2= color2.getBlue(); //sum of differences of RGB values of the two images long data = Math.abs(r1-r2)+Math.abs(g1-g2)+ Math.abs(b1-b2); diff = diff+data; } } double avg = diff/(w1*h1*3); double percentage = (avg/255)*100; System.out.println("Difference: "+percentage); } } }
Enter 1
Enter 2
출력
Difference: 92.54901960784314
위 내용은 Java OpenCV 라이브러리를 사용하여 두 이미지를 비교하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

JDBC 트랜잭션을 올바르게 처리하려면 먼저 자동 커밋 모드를 끄고 여러 작업을 수행 한 다음 결과에 따라 커밋 또는 롤백을 수행해야합니다. 1. 트랜잭션을 시작하려면 Conn.SetAutoCommit (False)에게 전화하십시오. 2. 인서트 및 업데이트와 같은 여러 SQL 작업을 실행합니다. 3. 모든 작업이 성공한 경우 Conn.commit ()에게 전화하여 데이터 일관성을 보장하기 위해 예외가 발생하면 Conn.Rollback ()에게 전화하십시오. 동시에, 재 시도는 리소스를 관리하고, 예외를 올바르게 처리하고, 연결 유출을 피하기 위해 긴밀한 연결을 사용하는 데 사용해야합니다. 또한 연결 풀을 사용하고 부분적으로 롤백을 달성하기 위해 저장 포인트를 설정하고 성능을 향상시키기 위해 거래를 가능한 한 짧게 유지하는 것이 좋습니다.

이전 날짜 및 달력 클래스를 대체하기 위해 Java.Time 패키지의 클래스를 사용하십시오. 2. LocalDate, LocalDateTime 및 LocalTime을 통해 현재 날짜와 시간을 얻으십시오. 3. () 메소드를 사용하여 특정 날짜와 시간을 만듭니다. 4. 플러스/마이너스 방법을 사용하여 시간을 불안정하게 늘리고 감소시킵니다. 5. ZonedDateTime 및 Zoneid를 사용하여 시간대를 처리하십시오. 6. DateTimeFormatter를 통해 형식 및 구문 분석 날짜 문자열; 7. 필요한 경우 이전 날짜 유형과 호환되도록 즉시 사용하십시오. 현대 Java의 날짜 처리는 명확하고 불변의 선형을 제공하는 Java.Timeapi 사용에 우선 순위를 부여해야합니다.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

Adeadlockinjavaoccurswhentwoormorethreadsareblockedsforever,, 일반적으로, 일반적으로 duetocircularwaitcausedbyinconsentlockordering; thiscanbeptrededbectedbectedbectedbectedbectedbectefeartefournecessaryconditions —MutualExclusion, holdandwait, nopualwait, nopualclusion, nopualclusion

String.join () (Java8) 사용은 문자열 배열을 연결하는 가장 권장되는 방법입니다. 분리기를 직접 지정하십시오. 2. 이전 버전의 Java 또는 더 많은 제어가 필요한 경우 StringBuilder를 사용하여 수동으로 통과하고 스플 라이스를 사용할 수 있습니다. 3. StringJoiner는 접두사 및 접미사와 같은보다 유연한 형식이 필요한 시나리오에 적합합니다. 4. arrays.stream ()을 Collectors.joining ()과 결합하여 결합하기 전에 배열을 필터링하거나 변환하는 데 적합합니다. 요약하면, Java8 이상을 사용하는 경우, 대부분의 경우 String.join () 메소드를 선호해야하며 간결하고 읽기 쉽지만 복잡한 논리에는 권장됩니다.

importjava.ioandjava.net.socketfori/oandsocketcommunication.2.createOcketObjectToConnectToThEserUsingHostNameAndport.3.usepritWriterTerndAviaOutputStreamandBufferEdERDERDERDEREADSERVERRSPONSSFROMINPUTSTREAM.4.USTERTRETOR-resto-restocoUtomati

.quals () 메소드를 사용하여 문자열 내용을 비교하십시오. == 컨텐츠보다는 객체 참조 만 비교하므로; 1. .Equals ()를 사용하여 문자열 값을 동일하게 비교합니다. 2. .EqualSignoreCase ()를 사용하여 사례를 무시하는 것을 비교합니다. 3. .compareto ()를 사용하여 사전 순서로 문자열을 비교하고 0, 음수 또는 양수 숫자를 반환합니다. 4. .comparetoignorecase ()를 사용하여 사례 무시를 비교합니다. 5. Objects.equals () 또는 안전한 호출 방법을 사용하여 널 포인터 예외를 피하기 위해 널 문자열을 처리합니다. 요컨대, 문자열 내용 비교에는 ==를 사용하지 않아야합니다.

Java 's Garbage Collection (GC)은 메모리를 자동으로 관리하는 메커니즘으로, 도달 할 수없는 물체를 되 찾아서 메모리 누출의 위험을 줄입니다. 1.GC는 루트 객체 (예 : 스택 변수, 활성 스레드, 정적 필드 등)에서 객체의 접근성을 판단하며, 도달 할 수없는 객체는 쓰레기로 표시됩니다. 2. 마크 클리어링 알고리즘을 기반으로, 모든 도달 가능한 객체와 표시되지 않은 개체를 표시하십시오. 3. 세대 수집 전략 채택 : 새로운 세대 (Eden, S0, S1)는 종종 미성년자를 실행합니다. 노인은 성능이 적지 만 MajorGC를 수행하는 데 시간이 더 걸립니다. Metaspace는 클래스 메타 데이터를 저장합니다. 4. JVM은 다양한 GC 장치를 제공합니다. SerialGC는 소규모 응용 프로그램에 적합합니다. ParallelGC는 처리량을 향상시킵니다. CMS가 줄어 듭니다
