

以下のエラーが消えません！

  * cv::MAT h_image 式にはポインタ型が必要です

os windows10  
コンパイラ visual studio2017

よろしくお願い致します。  
引用元：  
<https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1292659747>  
<http://kivantium.hateblo.jp/entry/20120822/p1>  
Kinect 実践プログラム 杉浦司

[code]

    #include"stdafx.h"
    #include <Windows.h>
    #include <NuiApi.h>
    
    #include <opencv2/opencv.hpp>
                while (1) {
                    drawRgbImage(image);
    
                cv::Mat h_image;
                cv::flip(image, h_image, 1);
    
                // RGB画像をHSV画像に変換
                cv::Mat hsv, extracted;
                cv::cvtColor(h_image, hsv, CV_RGB2HSV); // カメラ画像がBGRの場合はCV_BGR2HSV
                                                        // 色が100<=H<=120, 80<=S<=255, 80<=V<=255の範囲の部分を抽出する
                                                        // 色の範囲は抽出したい物体の色に合わせて調整する
                cv::Scalar hsv_min = cv::Scalar(120, 80, 80);
                cv::Scalar hsv_max = cv::Scalar(130, 255, 255);
                cv::inRange(hsv, hsv_min, hsv_max, extracted);
    
                // ラベリング実行
                cv::Mat labelImg, stats, centroids;
                int nLabels = cv::connectedComponentsWithStats(extracted, labelImg, stats, centroids);
    
                //画像を表示する
                cv::imshow("kinect Sample", h_image);
    
                //白く塗りつぶし
                using namespace std;
    
                //入力ファイル、出力ファイル名
                const char* srcimgfname("g:\\testimg\\test.bmp");
                const char* rstimgfname("g:\\testimg\\result.bmp");
    
                IplImage *srcimg = cvLoadImage(srcimgfname, CV_LOAD_IMAGE_COLOR);
                //入力画像をコピーし、白く塗りつぶす
                IplImage *rstimg = cvCloneImage(srcimg);
    
                    cvRectangle(srcimg, cvPoint(0, 0),
                        cvPoint(h_image->width, srcimg->height),
                        CV_RGB(0xff, 0xff, 0xff), CV_FILLED);
    
                    //画像データへのポインタ
                    unsigned char *srcpt = (unsigned char *)srcimg->imageData; //入力画像
                    unsigned char *rstpt = (unsigned char *)rstimg->imageData; //出力画像
    
                    for (int y = 0; y < srcimg->height; ++y) {
                        for (int x = 0; x < srcimg->width; ++x) {
                            if ((srcpt[0] == 0x00) && //B
                                (srcpt[1] == 0x00) && //G 
                                (srcpt[2] == 0xff)) { //R
                                                      //半径3の赤い円を描き、座標値を出力
                                cvCircle(rstimg, cvPoint(x, y), 3, CV_RGB(0xff, 0, 0));
                                printf("(%d,%d)=\n", x, y);
                            }
                    //ポインタを次の画素へ進める
                            srcpt += srcimg->nChannels;
                            rstpt += rstimg->nChannels;
                        }
                    }
    
    
    
                    cvSaveImage(rstimgfname, rstimg);
    
                    return 0;
                }
    
                        }
        }
    
[/code]


CC BY-SA 4.0
2018-11-05T06:24:48.227
49973
2019-02-05T08:28:13.920
2019-02-05T08:28:13.920
30446
30446
question
c++ opencv kinect
opencvで2値化し、特定の座標を表示させたいです


>   * 識別子srcimgが定義されていません
>   * 識別子"rstimg"が定義されていません
>   * 識別子"rstimgfname"が定義されていません
>

この3つは、この名前の変数が定義されていないために生じているエラーです。これらの変数はプログラムの途中で使われていますが、それより前にその定義がなされていません。[編集前のコード](https://ja.stackoverflow.com/revisions/49973/6)
では (変な所で main 関数の定義が始まっていることを除けば) これらの変数は定義されていますが、編集後の今はその部分が消されてしまっています。


CC BY-SA 4.0
2018-11-06T21:11:45.767
50025
2018-11-06T21:11:45.767
19110
49973
answer


> 以下のエラーが消えません！  
>  cv::MAT h_image 式にはポインタ型が必要です

質問文中には記載がありませんが、下記コード `h_image->width` で発生しているエラーでしょうか？

[code]

    cvRectangle(srcimg, cvPoint(0, 0),
                cvPoint(h_image->width, srcimg->height),
                CV_RGB(0xff, 0xff, 0xff), CV_FILLED);
    
[/code]

変数`h_image`は`cv::Mat`クラス型ですから、エラーメッセージどおりポインタ型ではありません。「画像の幅」が必要であれば、`h_image.cols`
または `h_image.size().width` と記述する必要があります。

* * *

題意とは無関係ですが、新旧OpenCVバージョンが混在したソースコードとなっているようです。特に `IplImage` 型は古いOpenCV
1.0時代の遺物のため推奨されません。基本的に `cv::Mat` の利用を検討してください（多くのOpenCV新機能は `IplImage`
をサポートしません）


CC BY-SA 4.0
2018-11-08T08:06:09.867
50088
2018-11-08T09:46:45.283
2018-11-08T09:46:45.283
49
49
49973
answer