gpt4 book ai didi

node.js - OpenCV 断言失败类型不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:05 26 4
gpt4 key购买 nike

我正在使用 node-opencv,我想获得两个 PNG 图像的规范,但我有这个:

OpenCV Error: Assertion failed (src1.size == src2.size && src1.type() == src2.type()) in norm, file /build/opencv-RI6cfE/opencv-2.4.9.1+dfsg1/modules/core/src/stat.cpp, line 1978

大小相同,类型不同。第一个 Mat 的 type() 和 channels() 方法返回 16 和 3,第二个 Mat 返回 24 和 4。

我尝试对两个图像执行 convertGrayscale 并得到“错误:图像不是 3 channel ”(好的,第二个有 4 个 channel ,但第一个?)

我也尝试做 second.convertTo(second,16) 但得到了

libpng warning: iCCP: known incorrect sRGB profile

没有任何效果,second.type() 仍然返回 24

有什么方法可以将任何 类型的 Mat 转换为某种灰度?我打算处理很多不同类型的图像,我需要将它们与标准灰度进行比较。

这是我的脚本:

var Promise = require("bluebird")
, fs = Promise.promisifyAll(require('fs'))
, cv = require('./opencv-build/node-opencv/lib/opencv');
var readImage = Promise.promisify(cv.readImage);
var ImageSimilarity = Promise.promisify(cv.ImageSimilarity);;
var imgdir = __dirname+'/img/';
var img_o = imgdir + 'src/walken.png';
var img_d = imgdir + 'dst/walken.png';

readImage(img_o).
then(function(first){
readImage(img_d)
.then(second=>{
second.convertTo(second,16);//no effect and >libpng warning: iCCP: known incorrect sRGB profile
console.log("first",
first.size(),
first.type(),
first.channels(),
"second",
second.size(),
second.type(),
second.channels());
//second.convertGrayscale();//doesn't work Error: Image is no 3-channel
console.log(first.norm(second, cv.Constants.NORM_L2));
});
});

这是输出:

libpng warning: iCCP: known incorrect sRGB profile first [ 963, 1848 ] 16 3 second [ 963, 1848 ] 24 4 OpenCV Error: Assertion failed (src1.size == src2.size && src1.type() == src2.type()) in norm, file /build/opencv-RI6cfE/opencv-2.4.9.1+dfsg1/modules/core/src/stat.cpp, line 1978 terminate called after throwing an instance of 'cv::Exception' what(): /build/opencv-RI6cfE/opencv-2.4.9.1+dfsg1/modules/core/src/stat.cpp:1978: error: (-215) src1.size == src2.size && src1.type() == src2.type() in function norm

Aborted (core dumped)

我认为 libpng 警告没有任何改变。

附言我尝试在 GIMP 中将两个图像都转换为灰度,两个图像的类型和 channel 都变为 0/1 并且 norm 按预期工作,我不明白为什么 opencv 不能这样做。

最佳答案

最后我从node-opencv切换了(适用于 OpenCV v2.3.1 位而不是 3.x)到 opencv4nodejs (适用于 OpenCV v3+)

现在规范运行良好。仍然存在 libpng 警告,但它可以正常工作。

看起来 OpenCV 现在可以自行处理 channel 不匹配问题。这是我的 opencv4nodejs 代码:

const cv = require('opencv4nodejs');
var imgdir = __dirname+'/img/';
var img_o = imgdir + 'src/walken.png';
var img_d = imgdir + 'dst/walken.png';

var first = cv.imread(img_o);
var second = cv.imread(img_d);
console.log(first.norm(second), cv.NORM_L2);

如您所见,这段代码现在可以同步运行,因此看起来更简洁。

关于node.js - OpenCV 断言失败类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493054/

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