以下のようなコードになったのですが、なぜか平均値がすべて同じ値になってしまいます。
正常にアクセスできていないか又は、計算ができていません。
どの部分が妨げているのでしょうか。
ご教授お願いします。
#include<iostream>
#include<opencv/cv.h>
#include<opencv/highgui.h>
#include<opencv2/opencv.hpp>
#include<fstream>
#include<stdio.h>
using namespace std;
using namespace cv;
IplImage *imgS1, *imgS2, *imgS3, *imgS4, *imgW1, *imgW2, *imgW3, *imgW4;
int main(int argc, char **argv)
{ //画像の読み込む(カラー)
imgS1 = cvLoadImage(("1.bmp"), CV_LOAD_IMAGE_COLOR); imgW1 = cvLoadImage(("W1.bmp"), CV_LOAD_IMAGE_COLOR);
imgS2 = cvLoadImage(("S2.bmp"), CV_LOAD_IMAGE_COLOR); imgW2 = cvLoadImage(("W2.bmp"), CV_LOAD_IMAGE_COLOR);
imgS3 = cvLoadImage(("S3.bmp"), CV_LOAD_IMAGE_COLOR); imgW3 = cvLoadImage(("W3.bmp"), CV_LOAD_IMAGE_COLOR);
imgS4 = cvLoadImage(("S4.bmp"), CV_LOAD_IMAGE_COLOR); imgW4 = cvLoadImage(("W4.bmp"), CV_LOAD_IMAGE_COLOR);
// HSVを格納するオブジェクトの作成
IplImage* hsvS1 = cvCreateImage(cvGetSize(imgS1), IPL_DEPTH_8U, 3), * hsvW1 = cvCreateImage(cvGetSize(imgW1), IPL_DEPTH_8U, 3),
* hsvS2 = cvCreateImage(cvGetSize(imgS2), IPL_DEPTH_8U, 3), * hsvW2 = cvCreateImage(cvGetSize(imgW2), IPL_DEPTH_8U, 3),
* hsvS3 = cvCreateImage(cvGetSize(imgS3), IPL_DEPTH_8U, 3), * hsvW3 = cvCreateImage(cvGetSize(imgW3), IPL_DEPTH_8U, 3),
* hsvS4 = cvCreateImage(cvGetSize(imgS4), IPL_DEPTH_8U, 3), * hsvW4 = cvCreateImage(cvGetSize(imgW4), IPL_DEPTH_8U, 3);
FILE *fpAllH;
errno_t error;
//総数
int countS1 = 0, countS2 = 0, countS3 = 0, countS4 = 0, countW1 = 0, countW2 = 0, countW3 = 0, countW4 = 0;
uchar qS1[3], qS2[3], qS3[3], qS4[3], qW1[3], qW2[3], qW3[3], qW4[3];
//平均
float hS1[3], hS2[3], hS3[3], hS4[3], hW1[3], hW2[3], hW3[3], hW4[3];
//初期化
hS1[0] = 0; hS1[1] = 0; hS1[2] = 0; hW1[0] = 0; hW1[1] = 0; hW1[2] = 0;
hS2[0] = 0; hS2[1] = 0; hS2[2] = 0; hW2[0] = 0; hW2[1] = 0; hW2[2] = 0;
hS3[0] = 0; hS3[1] = 0; hS3[2] = 0; hW3[0] = 0; hW3[1] = 0; hW3[2] = 0;
hS4[0] = 0; hS4[1] = 0; hS4[2] = 0; hW4[0] = 0; hW4[1] = 0; hW4[2] = 0;
//ファイルOPEN
if ((error = fopen_s(&fpAllH, "AllH.csv", "w"))){
return 0;
}
//S1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for (int y = 0; y < hsvS1->height; y++) {
for (int x = 0; x < hsvS1->width; x++) {
// HSVの取得
if (0 <= y && 0 <= x && y < hsvS1->height && x < hsvS1->width){
qS1[0] = hsvS1->imageData[hsvS1->widthStep * y + x * 3]; // H
qS1[1] = hsvS1->imageData[hsvS1->widthStep * y + x * 3 + 1]; // S
qS1[2] = hsvS1->imageData[hsvS1->widthStep * y + x * 3 + 2]; // V
//HSVそれぞれ平均を求める
hS1[0] = hS1[0] + (float)qS1[0];
hS1[1] = hS1[1] + (float)qS1[1];
hS1[2] = hS1[2] + (float)qS1[2];
countS1++;
//出力
printf("H:S:V"); printf("(%d,", qS1[0]); printf("%d,", qS1[1]); printf("%d)\n", qS1[2]);
}
}
}
//excelに平均を出力
hS1[0] = hS1[0] / countS1;
hS1[1] = hS1[1] / countS1;
hS1[2] = hS1[2] / countS1;
fprintf(fpAllH, "%d,%d,%d \n", (uchar)hS1[0], (uchar)hS1[1], (uchar)hS1[2]);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//平均の出力
printf("hS1[H]の平均:%f ", hS1[0]); printf("hS1[S]の平均:%f ", hS1[1]); printf("hS1[V]の平均:%f\n", hS1[2]);
printf("hS2[H]の平均:%f ", hS2[0]); printf("hS2[S]の平均:%f ", hS2[1]); printf("hS2[V]の平均:%f\n", hS2[2]);
printf("hS3[H]の平均:%f ", hS3[0]); printf("hS3[S]の平均:%f ", hS3[1]); printf("hS3[V]の平均:%f\n", hS3[2]);
printf("hS4[H]の平均:%f ", hS4[0]); printf("hS4[S]の平均:%f ", hS4[1]); printf("hS4[V]の平均:%f\n", hS4[2]);
printf("hW1[H]の平均:%f ", hW1[0]); printf("hW1[S]の平均:%f ", hW1[1]); printf("hW1[V]の平均:%f\n", hW1[2]);
printf("hW2[H]の平均:%f ", hW2[0]); printf("hW2[S]の平均:%f ", hW2[1]); printf("hW2[V]の平均:%f\n", hW2[2]);
printf("hW3[H]の平均:%f ", hW3[0]); printf("hW3[S]の平均:%f ", hW3[1]); printf("hW3[V]の平均:%f\n", hW3[2]);
printf("hW4[H]の平均:%f ", hW4[0]); printf("hW4[S]の平均:%f ", hW4[1]); printf("hW4[V]の平均:%f\n", hW4[2]);
//総数の出力
printf("S1の総数:%d\n", countS1);
printf("S2の総数:%d\n", countS2);
printf("S3の総数:%d\n", countS3);
printf("S4の総数:%d\n", countS4);
printf("W1の総数:%d\n", countW1);
printf("W2の総数:%d\n", countW2);
printf("W3の総数:%d\n", countW3);
printf("W4の総数:%d\n", countW4);
//ファイルを閉じる
fclose(fpAllH);
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
cvShowImage("Image", hsvS1);
cvWaitKey(0);
cvDestroyWindow("Image");
cvReleaseImage(&hsvS1), cvReleaseImage(&hsvS2), cvReleaseImage(&hsvS3), cvReleaseImage(&hsvS4),
cvReleaseImage(&hsvW1), cvReleaseImage(&hsvW2), cvReleaseImage(&hsvW3), cvReleaseImage(&hsvW4);
return 0;
}