深度マップの各ピクセルを操作しようとしています。(画像セグメンテーションを実装しています。) 深度が 1 より大きい画像のピクセルを処理する方法がわかりません。
このサンプル コードは、深度マップを別の cv::Mat にピクセル単位でコピーします。正規化するとうまくいきます(正規化された画像の深さ= 1)。しかし、深さ = 3 では動作しません.at<uchar>
。この深さでは操作が間違っているためです。
cv::Mat res;
cv::StereoBM bm(CV_STEREO_BM_NORMALIZED_RESPONSE);
bm(left, right, res);
std::cout<<"type "<<res.type()<<" depth "<<res.depth()<<" channels "<<res.channels()<<"\n";// type 3 depth 3 channels 1
cv::Mat tmp = cv::Mat::zeros(res.rows, res.cols, res.type());
for(int i = 0; i < res.rows; i++)
{
for(int j = 0; j < res.cols; j++)
{
tmp.at<uchar>(i, j) = res.at<uchar>(i, j);
//std::cout << (int)res.at<uchar>(i, j) << " ";
}
//std::cout << std::endl;
}
cv::imshow("tmp", normalize(tmp));
cv::imshow("res", normalize(res));
関数を正規化する
cv::Mat normalize(cv::Mat const &depth_map)
{
double min;
double max;
cv::minMaxIdx(depth_map, &min, &max);
cv::Mat adjMap;
cv::convertScaleAbs(depth_map, adjMap, 255 / max);
return adjMap;
}
左の画像 - tmp、右の画像 - res
深度が 3 の画像からピクセルを取得するにはどうすればよいですか?