に失敗した私は、ノードのOpenCVを使用していますが、私は2枚のPNG画像のための規範を取得したいが、私は代わりに、これを持っている:OpenCVのアサーションは、型の不一致
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 return 16と3と2番目の24と4については、type()メソッドとchannels()メソッドを使用します。
両方のイメージでconvertGrayscaleを実行しようとしましたが、 "Error:Image is no 3-channel"最初の4つのチャンネルが、を持っている?)私も(第2、16)second.convertToを実行しようとしましたが、
を持って、何の効果、second.typeありませんでしたlibpng warning: iCCP: known incorrect sRGB profile
()まだ返さ24
のマットを変換する方法はありますかはある種のグレースケールにタイプするのですか? 私はさまざまな種類の画像をたくさん処理するつもりです。それらをグレースケールとして標準と比較する必要があります。
は、ここに私のスクリプトです:
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の警告は何も変わらないと思います
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)
。
P.S. 両方の画像をGIMPのグレースケールに変換しようとしましたが、両方の画像のタイプとチャンネルが0/1になり、ノーマルが期待どおりに動作します。なぜopencvができないのか分かりません。
あなたの 'convertTo'がベースのOpenCVからの' cv :: Mat :: convertTo'に対応するならば、それはあなたが望む機能ではありません。これにより、タイプ間で変換されます(uint8、floatなど)。あなたが探しているのは、**色空間**を変換することです。つまり、 'cvtColor'が必要です。 |あなたの入力画像の1つに透明度が含まれているように見えますが、もう1つは現在のチャンネルの数に違いがあります。 |残念ながら、それらのバインディングは元のAPIと非常によく似ているようには見えないので、私はもっと具体的なものを提供することはできません。 –
また、 'convertTo 'を呼び出すとlibpngエラーが発生することはちょっと奇妙です.OpenCV自体では、その機能はlibpngとまったく関係ありません。 –
ええ、私もこのバインディングに不満を持ち、別のものに切り替えることにしました。 –