回答編集履歴
2
修正
answer
CHANGED
@@ -65,7 +65,7 @@
|
|
65
65
|
// const uchar *_img = img[y];
|
66
66
|
// for(int x = 0, width = img.cols ; x < width; x++){ //変化なし
|
67
67
|
// if(_img[x] == 255){
|
68
|
-
for(int x = 0 ; x <
|
68
|
+
for(int x = 0, width = img.cols ; x < width; x++){
|
69
69
|
if(img( y, x ) == 255){
|
70
70
|
count++;
|
71
71
|
x_g += x;
|
1
追記
answer
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
double x_g=0.0,y_g=0.0;
|
22
22
|
for(int y = 0 ; y < img.rows; y++){
|
23
23
|
for(int x = 0 ; x < img.cols; x++){
|
24
|
-
if(img.at( y, x ) == 255){
|
24
|
+
if(img.at<uchar>( y, x ) == 255){
|
25
25
|
count++;
|
26
26
|
x_g += x;
|
27
27
|
y_g += y;
|
@@ -43,4 +43,47 @@
|
|
43
43
|
}
|
44
44
|
```
|
45
45
|
|
46
|
-
とするだけですよ
|
46
|
+
とするだけですよ
|
47
|
+
**修正:** 指摘を受け、img.at( y, x )をimg.at<uchar>( y, x )に変更
|
48
|
+
|
49
|
+
---
|
50
|
+
|
51
|
+
**追記**
|
52
|
+
Mat1b つまり Mat_<uchar>を使うと
|
53
|
+
```c++
|
54
|
+
#include <stdio.h>
|
55
|
+
#include "opencv/cv.h"
|
56
|
+
#include "opencv/highgui.h"
|
57
|
+
using namespace cv;
|
58
|
+
|
59
|
+
int main(){
|
60
|
+
Mat1b img = imread("sample.jpg", IMREAD_GRAYSCALE);
|
61
|
+
int count=0;
|
62
|
+
double x_g=0.0,y_g=0.0;
|
63
|
+
for(int y = 0, height = img.rows; y < height; y++){
|
64
|
+
// パフォーマンス的には↓3行を置き換えた方が速い
|
65
|
+
// const uchar *_img = img[y];
|
66
|
+
// for(int x = 0, width = img.cols ; x < width; x++){ //変化なし
|
67
|
+
// if(_img[x] == 255){
|
68
|
+
for(int x = 0 ; x < img.cols; x++){
|
69
|
+
if(img( y, x ) == 255){
|
70
|
+
count++;
|
71
|
+
x_g += x;
|
72
|
+
y_g += y;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
x_g /= conut;
|
77
|
+
y_g /= count;
|
78
|
+
|
79
|
+
Point2f mc = Point2f( x_g, y_g);
|
80
|
+
|
81
|
+
circle( img, mc, 4, Scalar(100), 2, 4);
|
82
|
+
|
83
|
+
printf("x: %f y: %f", mc.x, mc.y);
|
84
|
+
|
85
|
+
imshow("img",img);
|
86
|
+
waitKey(0);
|
87
|
+
return 0;
|
88
|
+
}
|
89
|
+
```
|