Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
공백 변경 숨기기
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
텍스트 스타일
모양 변경
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Untitled diff
생성일
8년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
3 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
53 행
복사
20 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
72 행
복사
복사
복사됨
복사
복사됨
const cv = require('
../
');
const cv = require('
opencv4nodejs
');
const matchFeatures = ({ img1, img2, detector, matchFunc }) => {
const matchFeatures = ({ img1, img2, detector, matchFunc }) => {
// detect keypoints
// detect keypoints
const keyPoints1 = detector.detect(img1);
const keyPoints1 = detector.detect(img1);
const keyPoints2 = detector.detect(img2);
const keyPoints2 = detector.detect(img2);
// compute feature descriptors
// compute feature descriptors
const descriptors1 = detector.compute(img1, keyPoints1);
const descriptors1 = detector.compute(img1, keyPoints1);
const descriptors2 = detector.compute(img2, keyPoints2);
const descriptors2 = detector.compute(img2, keyPoints2);
// match the feature descriptors
// match the feature descriptors
const matches = matchFunc(descriptors1, descriptors2);
const matches = matchFunc(descriptors1, descriptors2);
// only keep good matches
// only keep good matches
const bestN = 40;
const bestN = 40;
const bestMatches = matches.sort(
const bestMatches = matches.sort(
(match1, match2) => match1.distance - match2.distance
(match1, match2) => match1.distance - match2.distance
).slice(0, bestN);
).slice(0, bestN);
복사
복사됨
복사
복사됨
matchedPoints1 = [];
matchedPoints2 = [];
for( let i = 0; i < bestMatches.length; i++ ){
//-- Get the keypoints from the good matches
matchedPoints1.push( keyPoints1[ bestMatches[i].queryIdx ].point );
matchedPoints2.push( keyPoints2[ bestMatches[i].trainIdx ].point );
}
const homography = cv.findHomography(matchedPoints1, matchedPoints2).homography;
const srcCorners = new cv.Mat([[
[0, 0, 1],
[img1.cols, 0, 1],
[img1.cols, img1.rows, 1],
[0, img1.rows, 1]
]], cv.CV_32F3C);
const dstCoordinates = srcCorners.perspectiveTransform(homography)
console.log(dstCoordinates);
return cv.drawMatches(
return cv.drawMatches(
img1,
img1,
img2,
img2,
keyPoints1,
keyPoints1,
keyPoints2,
keyPoints2,
bestMatches
bestMatches
);
);
};
};
복사
복사됨
복사
복사됨
const img1 = cv.imread('
../data/
s0.jpg');
const img1 = cv.imread('
s0.jpg');
const img2 = cv.imread('
../data/
s1.jpg');
const img2 = cv.imread('
s1.jpg');
// check if opencv compiled with extra modules and nonfree
// check if opencv compiled with extra modules and nonfree
if (cv.xmodules.xfeatures2d) {
if (cv.xmodules.xfeatures2d) {
const siftMatchesImg = matchFeatures({
const siftMatchesImg = matchFeatures({
img1,
img1,
img2,
img2,
detector: new cv.SIFTDetector({ nFeatures: 2000 }),
detector: new cv.SIFTDetector({ nFeatures: 2000 }),
matchFunc: cv.matchFlannBased
matchFunc: cv.matchFlannBased
});
});
cv.imshowWait('SIFT matches', siftMatchesImg);
cv.imshowWait('SIFT matches', siftMatchesImg);
} else {
} else {
console.log('skipping SIFT matches');
console.log('skipping SIFT matches');
}
}
const orbMatchesImg = matchFeatures({
const orbMatchesImg = matchFeatures({
img1,
img1,
img2,
img2,
detector: new cv.ORBDetector(),
detector: new cv.ORBDetector(),
matchFunc: cv.matchBruteForceHamming
matchFunc: cv.matchBruteForceHamming
});
});
cv.imshowWait('ORB matches', orbMatchesImg);
cv.imshowWait('ORB matches', orbMatchesImg);
저장된 비교 결과
원본
파일 열기
const cv = require('../'); const matchFeatures = ({ img1, img2, detector, matchFunc }) => { // detect keypoints const keyPoints1 = detector.detect(img1); const keyPoints2 = detector.detect(img2); // compute feature descriptors const descriptors1 = detector.compute(img1, keyPoints1); const descriptors2 = detector.compute(img2, keyPoints2); // match the feature descriptors const matches = matchFunc(descriptors1, descriptors2); // only keep good matches const bestN = 40; const bestMatches = matches.sort( (match1, match2) => match1.distance - match2.distance ).slice(0, bestN); return cv.drawMatches( img1, img2, keyPoints1, keyPoints2, bestMatches ); }; const img1 = cv.imread('../data/s0.jpg'); const img2 = cv.imread('../data/s1.jpg'); // check if opencv compiled with extra modules and nonfree if (cv.xmodules.xfeatures2d) { const siftMatchesImg = matchFeatures({ img1, img2, detector: new cv.SIFTDetector({ nFeatures: 2000 }), matchFunc: cv.matchFlannBased }); cv.imshowWait('SIFT matches', siftMatchesImg); } else { console.log('skipping SIFT matches'); } const orbMatchesImg = matchFeatures({ img1, img2, detector: new cv.ORBDetector(), matchFunc: cv.matchBruteForceHamming }); cv.imshowWait('ORB matches', orbMatchesImg);
수정본
파일 열기
const cv = require('opencv4nodejs'); const matchFeatures = ({ img1, img2, detector, matchFunc }) => { // detect keypoints const keyPoints1 = detector.detect(img1); const keyPoints2 = detector.detect(img2); // compute feature descriptors const descriptors1 = detector.compute(img1, keyPoints1); const descriptors2 = detector.compute(img2, keyPoints2); // match the feature descriptors const matches = matchFunc(descriptors1, descriptors2); // only keep good matches const bestN = 40; const bestMatches = matches.sort( (match1, match2) => match1.distance - match2.distance ).slice(0, bestN); matchedPoints1 = []; matchedPoints2 = []; for( let i = 0; i < bestMatches.length; i++ ){ //-- Get the keypoints from the good matches matchedPoints1.push( keyPoints1[ bestMatches[i].queryIdx ].point ); matchedPoints2.push( keyPoints2[ bestMatches[i].trainIdx ].point ); } const homography = cv.findHomography(matchedPoints1, matchedPoints2).homography; const srcCorners = new cv.Mat([[ [0, 0, 1], [img1.cols, 0, 1], [img1.cols, img1.rows, 1], [0, img1.rows, 1] ]], cv.CV_32F3C); const dstCoordinates = srcCorners.perspectiveTransform(homography) console.log(dstCoordinates); return cv.drawMatches( img1, img2, keyPoints1, keyPoints2, bestMatches ); }; const img1 = cv.imread('s0.jpg'); const img2 = cv.imread('s1.jpg'); // check if opencv compiled with extra modules and nonfree if (cv.xmodules.xfeatures2d) { const siftMatchesImg = matchFeatures({ img1, img2, detector: new cv.SIFTDetector({ nFeatures: 2000 }), matchFunc: cv.matchFlannBased }); cv.imshowWait('SIFT matches', siftMatchesImg); } else { console.log('skipping SIFT matches'); } const orbMatchesImg = matchFeatures({ img1, img2, detector: new cv.ORBDetector(), matchFunc: cv.matchBruteForceHamming }); cv.imshowWait('ORB matches', orbMatchesImg);
비교하기