簡體   English   中英

opencv 訪問 CV_32FC3 BGR cv::Mat 的顏色元素

[英]opencv accessing color element of CV_32FC3 BGR cv::Mat

我有一個問題。 我看到了一些更類似的問題,但我找不到解決方案。

我的問題是我有一個 CV_32FC3 cv::Mat,其中的值存儲在 0 到 255 之間的范圍內,我們稱之為 S。

我必須創建一個名為 P 的矩陣,其中存儲所有像素的 BGR 值。

所以 P 應該將 S 像素的總元素作為行編號,並將通道數作為列編號 (3)。

這就是我試圖做的:

int n_pixels = S.cols * S.rows;
p = Mat::zeros(n_pixels, 3, CV_32FC1);

for(int i=0; i<n_pixels; i++) {
    Scalar pixel = S.at<Scalar>(i); // i've tried also Vec3f, Point3_, etc..

    p.at<float>(i,0) = pixel[0];
    p.at<float>(i,1) = pixel[1];
    p.at<float>(i,2) = pixel[2];
}

我也嘗試過像這樣的低級 c-api 數據訪問:

for(int i=0; i<selection.rows; i++) {
    p.at<float>(i,0) = S.ptr<float>(i)[0];
    p.at<float>(i,1) = S.ptr<float>(i)[1];
    p.at<float>(i,2) = S.ptr<float>(i)[2];

}

以及分割通道(但分割通道的類型為 CV_8U 所以我認為這是錯誤的):

vector<Mat> bgr;
cv::split(S, bgr);

for(int i=0; i<n_pixels; i++) {
    p.at<float>(i,0) = bgr[0].data[i];
    p.at<float>(i,1) = bgr[1].data[i];
    p.at<float>(i,2) = bgr[2].data[i];
}

但每次如果計算像素,我都會得到非常奇怪的結果,例如:

172.2042 0.0000 0.0000 
2771.1414 0.0000 0.0000 
2939505920.0000 3.3468 0.0000 
3079446986752.0000 0.0129 0.0000 
192669347217408.0000 0.8367 0.0000 
51956177323392237568.0000 16301891256320.0000 0.0509 
58314208864123224064.0000 3.3945 0.0029 
180449.1406 0.0000 0.0000 
0.6531 0.0000 0.0000 
0.0100 0.0000 0.0000 
2.7373 0.0000 0.0000 
10957.3184 0.0000 0.0000 
739729604608.0000 3.3778 0.0000 
0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 
0.0000 0.0000 0.0000 

而且,在某些情況下也會出現段錯誤..

任何疑慮? 如何解決? 為什么我的試驗是錯誤的?

編輯:我認為問題是數據類型轉換

for(int row = 0; row < resiz.rows; ++row) {
    float* p = resiz.ptr<float>(row);

    for(int col = 0; col < resiz.cols; ++col,p+=3) {
        p[0]=; p[1]=; p[2]=;
    }
}

我認為您以錯誤的方式訪問矩陣元素。

S.at<Scalar>(i);

這與

S.at<Scalar>(Point(i,0));

但是您需要提供xy坐標。

對我來說,這段代碼給出了預期的結果:

for(int i=0; i<n_pixels; i++) 
{
    Vec3f pixel = S.at<Vec3f>(i/S.cols, i%S.cols);

    p.at<float>(i,0) = pixel[0];
    p.at<float>(i,1) = pixel[1];
    p.at<float>(i,2) = pixel[2];
}

暫無
暫無

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

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