opencvで2値化し、特定の座標を表示させたいです
以下のエラーが消えません!
- 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 実践プログラム 杉浦司
#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;
}
}
}