gpt4 book ai didi

javascript - 我需要有关如何通过python/numpy将创建的矩阵转换为javascript的指南

转载 作者:行者123 更新时间:2023-12-02 17:19:28 25 4
gpt4 key购买 nike

我需要将2张图片与opencv.js对齐
我正在尝试找到解决方法here的问题。所以我正在尝试this approach
我在尝试在JavaScript中重新创建(和计算)python numpy转换矩阵时遇到问题。
这是python:


image_baseline_keypoints = np.float32([kpv_image_baseline[m.queryIdx].pt for m in matches[:number_of_matches]]).reshape(-1, 1, 2);
image_keypoints = n.float32([kpv_image[m.trainIdx].pt for m in matches[:number_of_matches]]).reshape(-1, 1, 2);

(note: the article [linked above][2] has another way of creating the matrix via numpy as well. )
在javascript中执行相同操作的适当方法是什么? 是否可以使用numjs(接下来尝试使用它,但如果可能的话,我不想引入另一个库)?
这是整体JS代码:

function Align_img2() {

let image_baseline = cv.imread(imgElement_Baseline);
let image = cv.imread('imageChangeup');

let image_baseline_gray = new cv.Mat();
let image_gray = new cv.Mat();

//get size of baseline image
var image_baseline_width = image_baseline.cols;
var image_baseline_height = image_baseline.rows;

//resize image to baseline image
let image_baseline_dimensions = new cv.Size(image_baseline_width, image_baseline_height);
cv.resize(image, image, image_baseline_dimensions, cv.INTER_AREA);

// Convert images to grayscale
cv.cvtColor(image_baseline, image_baseline_gray, cv.COLOR_BGR2GRAY);
cv.cvtColor(image, image_gray, cv.COLOR_BGR2GRAY);

// Initiate detector
var orb = new cv.ORB(10000);
var kpv_image_baseline = new cv.KeyPointVector();
var kpv_image = new cv.KeyPointVector();
var descriptors_image_baseline =new cv.Mat();
var descriptors_image =new cv.Mat();
var image_baseline_keypoints=new cv.Mat();
var image_keypoints =new cv.Mat();

// find the keypoints with ORB
orb.detect(image_baseline_gray, kpv_image_baseline);
orb.detect(image_gray, kpv_image);

// compute the descriptors with ORB
orb.compute(image_baseline_gray, kpv_image_baseline, descriptors_image_baseline);
orb.compute(image_gray, kpv_image, descriptors_image);

// Debug to verify key points found
//let color = new cv.Scalar(0,255,0, 255);
//cv.drawKeypoints(image_baseline_gray, kpv_image_baseline, image_baseline_keypoints, color);
//cv.drawKeypoints(image_gray, kpv_image, image_keypoints, color);
//console.log(image_baseline_keypoints);
//console.log(image_keypoints);

// find matches
let bf = new cv.BFMatcher(cv.NORM_HAMMING, 1);
// Match descriptors
let matches = new cv.DMatchVector();
bf.match(descriptors_image_baseline, descriptors_image, matches);

// Debug to verify matches found
//var matches_img = new cv.Mat();
//cv.drawMatches(image_baseline_gray, kpv_image_baseline, image_gray, kpv_image, matches, matches_img, color);
//console.log(matches_img);

// calculate transformation matrix
number_of_matches = 10;
/*
image_baseline_keypoints = np.float32([kpv_image_baseline[m.queryIdx].pt for m in matches[:number_of_matches]]).reshape(-1, 1, 2);
image_keypoints = np.float32([kpv_image[m.trainIdx].pt for m in matches[:number_of_matches]]).reshape(-1, 1, 2);
*/

//note: np => nj in numjs
image_baseline_keypoints = nj.float32([kpv_image_baseline[m.queryIdx].pt for (m in matches)]).reshape(-1, 1, 2);
image_keypoints = nj.float32([kpv_image[m.trainIdx].pt for (m in matches)]).reshape(-1, 1, 2);

// Calculate Homography
var h = new cv.Mat();
h = cv.findHomography(image_baseline_keypoints, image_keypoints);

// Warp image to baseline_image based on homography
var dst = new cv.Mat();
cv.warpPerspective(image_gray, dst, h, (image_baseline_gray.shape[1], image_baseline_gray.shape[0]));
cv.imshow('imageChangeup', dst);

matches_img.delete();
matches.delete();
bf.delete();
orb.delete();
kpv_image_baseline.delete();
kpv_image.delete();
descriptors_image_baseline.delete();
descriptors_image.delete();
image_baseline_keypoints.delete();
image_keypoints.delete();
image_baseline_gray.delete();
image_gray.delete();
h.delete();
dst.delete();
};

最佳答案

不幸的是,opencvjs doc是AWFUL!实际上没有什么可以命名为doc!
cv.findHomography方法具有3个参数。其中前两个必须是matArray。您必须通过调用以下命令将pointA和pointB转换为matArray:cv.matFromArray(number_of_cols_pointsA,2,cv.CV_32F,pointsA)在这里,“2”是数组尺寸。
和CV_32F引用float32类型的mat。
对于findHomography的第三个参数,您可以使用cv.RANSAC

关于javascript - 我需要有关如何通过python/numpy将创建的矩阵转换为javascript的指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62882219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com