0

同様の質問がありましたが、答えは古いCAPIに対するものでした。

カラー画像をロードしていcv::Mat img = cv::imread("C:/some_image.jpg"); ます。通常、グレースケール画像の要素にアクセスしますimg.at<float>(row, col)が、これは明らかにフロートを返します。各ピクセル位置で各コンポーネントR、G、Bの値(おそらく浮動小数点数?整数?)を取得するにはどうすればよいですか?

4

2 に答える 2

1

これを行う1つの方法は、あなたが持っているのと同じですが、3つのチャネルは、1つのチャネルフロートではなく、3次元ベクトルに格納されます。

cv::Mat img = ...;
cv::Vec3f pixel = img.at<cv::Vec3f>(row, col);
// pixel contains [red, green, blue] values
于 2012-04-20T18:46:59.617 に答える
0

あなたはこのようにすることができます:

img_channel_=image.channels();
img_rows_=image.rows;
img_cols_=image.cols;
if (image.isContinuous() && fg_img_.isContinuous() && moving_img_.isContinuous() && abandon_img_.isContinuous()) {
    img_cols_ *=img_rows_;
    img_rows_=1;
}
img_cols_*=img_channel_;
for (int i=0; i<img_rows_; ++i) {
    const int iindex=i*img_cols_;
    const uchar *piex=image.ptr<uchar>(i);//three channel
    for (int j=0,truej=0; j<img_cols_; j+=img_channel_, ++truej) {
       piex[0]=pixe[1]+piex[2];//B=G+R
    }
}
于 2012-07-25T06:18:15.733 に答える