簡體   English   中英

C ++ Opencv:嘗試打印Mat值,但得到空打印

[英]C++ Opencv: Try to print Mat value, but get empty prints

完整的源代碼如下所示:

#include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char const *argv[])
{
    int n_Channel = 3;
    Mat M(Size(100, 200), CV_32FC(n_Channel));

    cout << M.rows << "," << M.cols << "," << M.channels() << endl;
    for (int i = 0; i < n_Channel; ++i)
    {
        M.at<Vec3b>(4,3)[i] = i+1;
    }
    for (int i = 0; i < n_Channel; ++i)
    {
        cout << "i=" << i << ", " << M.at<Vec3b>(4,3) << endl;
        cout << "i=" << i << ", |" << M.at<Vec3b>(4,3)[i] << "|" << endl;
    }
    return 0;
}

在打印的最后,我希望看到打印的行,例如“ i = 0,| 2 |”。 但是,我得到“ i = 0,||”,而在“ |”對中沒有任何內容。 我的代碼出了什么問題?

完整的打印消息如下所示:

200,100,3
i=0, [1, 2, 3]
i=0, ||
i=1, [1, 2, 3]
i=1, ||
i=2, [1, 2, 3]
i=2, ||

謝謝大家的幫助!

Miki的評論是正確的,但這是為什么發生上述錯誤的解釋:

在通過以下方式初始化Mat M

Mat M(Size(100, 200), CV_32FC(n_Channel));

M的矩陣類型設置為32位,並且3通道Mat M中的每個像素保持的浮點值介於0到1.0之間。 現在要打印Mat M中的像素值,必須使用正確的說明符 ,對於Mat M ,它應該是Vec3f (即具有3個浮點條目的Vector而不是Vec3b ,即具有3個字節條目的Vector(將適用於CV_8UC3 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM