teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2018/06/12 02:14

投稿

asm
asm

スコア15149

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 < img.cols; 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

追記

2018/06/12 02:14

投稿

asm
asm

スコア15149

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
+ ```