

何か良い方法はないでしょうか？

[code]

    cout<<min(depth[i])<<endl;
    
[/code]

でやってみたのですがうまくいかなかったです

[code]

    #include"stdafx.h"     
    #include <vector>
    #include<algorithm>
    
    using namespace std;
    
    NUI_LOCKED_RECT depthData = { 0 };
    depthFrame.pFrameTexture->LockRect(0, &depthData, 0, 0);
    USHORT* depth = (USHORT*)depthData.pBits;
    
    LONG registX = 0;
    LONG registY = 0;
    cv::Mat bufferMat = cv::Mat::zeros(height, width, CV_16UC1);
    ushort* pBuffer = reinterpret_cast<ushort*>(depthData.pBits);
    ushort bb[307200];
    
    for (int yy = 0; yy < 480; yy++) {
        for (int xx = 0; xx < 640; xx++) {
            unsigned int index = yy * 640 + xx;
            bb[index] = NuiDepthPixelToDepth(pBuffer[index]);
        }
    }
    for (int y = 0; y < 480; y++) {
        for (int x = 0; x < 640; x++) {
            kinect->NuiImageGetColorPixelCoordinatesFromDepthPixelAtResolution(CAMERA_RESOLUTION, CAMERA_RESOLUTION, 0, x, y, *depth, &registX, &registY);
            if ((registX >= 0) && (registX < 640) && (registY >= 0) && (registY < 480)) {
                bufferMat.at<ushort>(registY, registX) = *depth;
            }
            depth++;
    
            int index = x + y * width;
            int z = bb[index];
            //printf("ピクセル番号x %d ||y %d, 距離情報%d \n", x,y, bb[index]);
            cout<<min(bb[index])<<endl;
    
[/code]

エラー

[code]

    オーバートードされた関数minのインスタンスが引数リストが一致しません（引数の型　ushort)
    
[/code]


CC BY-SA 4.0
2019-02-04T08:53:37.260
52536
2019-02-06T05:51:11.520
2019-02-06T05:51:11.520
3060
30446
question
c++ opencv kinect
深度センサーから得られた距離情報の中から最小値を出力したい


文言「最小」ってことは「複数個の中で」最小ってことです。これに対して提示コード `ushort bb[307200];` に
`min(bb[index])` では「１つ」しか値を渡していないのでコンパイラに怒られています。

最小値を求める [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") 標準ライブラリ関数は
`std::min` と `std::min_element` の２つがあって、提示例の場合は `std::min_element` のほうが自然かも。

[code]

    #define elementsof(a) (sizeof(a)/sizeof(0[a]))
    ushort const* minp = std::min_element(bb+0, bb+elementsof(bb));
    std::cout << *minp << std::endl;
    
[/code]

で最小値を表示することができるでしょう。

で、上記コードをどこに置くべきか、なんですが、提示コードでは最小値をループ内で毎回求めていますが、見る限り `bb`
はループ内で変化していないので無駄無駄無駄無駄です。最小値を求めるコードはループ外に置いて、求めた最小値（のコピー）をループ内で使いましょう。

# 提示コード中 `307200` という値は `640*480` としたほうがわかりやすいだろうとか  
# そもそも `640` などと魔法の数字を複数回数ソースコードに書くのはダメダメとか  
# `bb` は 600KiB の大きさがあるので Win32 のスタックに置くのはぎりぎりとか  
# その辺のつっこみ始めると止まらないので独り言モードで。


CC BY-SA 4.0
2019-02-04T23:52:27.520
52546
2019-02-05T05:46:18.217
2019-02-05T05:46:18.217
8589
8589
52536
answer