[OpenCV] 配列を Mat に変換する際の問題

マットタイプ 対応するデータ型
CV_8UC1 符号なし文字
CV_8SC1 文字
CV_16UC1 符号なしショート
CV_16SC1 短い
CV_32UC1 unsigned int / unsigned long
CV_32SC1 整数 / 長整数
CV_32FC1 浮く
CV_64FC1 ダブル

C++ では、通常、
char は 1 バイト (8 ビット)、
short は 2 バイト (16 ビット)
、int は 4 バイト (32 ビット)、
float は 4 バイト (32 ビット)、
double は 8 バイト (64 ビット) です。

予防
配列を Mat 型に変換するときは、上記の表のデータ型と一致するように注意してください。そうでないと、いくつかの奇妙な問題が発生します。

例:
Mat に変換して浮動小数点演算を実行する必要がある Int 型の配列があります。

int ddd[3] = {
    
    197111, 297111, 397111};
cv::Mat height_img = cv::Mat(1, 3, CV_32SC1, ddd);
cv::Mat gray_img;
height_img.convertTo(gray_img, CV_32FC1);
gray_img = gray_img / 100000.0;

std::cout << gray_img;

その方法は、 Int 配列を Mat に変換するときに選択しCV_32SC1、その Mat を変換してCV_32FC1浮動小数点演算を実行するというものです。

覚えておいてください: 初期化中に直接選択しないでくださいCV_32FC1。そうしないと、後続の計算でも整数演算として扱われます。

おすすめ

転載: blog.csdn.net/iiinoname/article/details/127600364