質問編集履歴

2

修正

2021/04/21 05:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,66 @@
1
- C++でOpenCVを使わないで、ソベルフィルタを実装したいのですが実行時に処理が終わらないです。
1
+ C++でソベルフィルタを実装したいのですが実行時に処理が終わらないです。
2
+
3
+
4
+
5
+ ```C++
6
+
7
+ #include <opencv2/opencv.hpp>
8
+
9
+
10
+
11
+ int main() {
12
+
13
+
14
+
15
+ // 画像の入力
16
+
17
+ cv::Mat input_image = cv::imread("input.jpg", 0);
18
+
19
+ cv::Mat sobel_image, output_image;
20
+
21
+
22
+
23
+ /* Sobelフィルタ (3×3)
24
+
25
+ -1 0 1
26
+
27
+ -2 0 2
28
+
29
+ -1 0 1 */
30
+
31
+
32
+
33
+ // Sobelフィルタの処理(入力画像,出力画像,出力タイプ,x方向の微分次数,y方向の微分次数,フィルタサイズ)
34
+
35
+ cv::Sobel(input_image, sobel_image, CV_32F, 1, 0, 3); // x方向の微分フィルタ
36
+
37
+ // cv::Sobel(input_image, sobel_image, CV_32F, 0, 1, 3); // y方向の微分フィルタ
38
+
39
+
40
+
41
+ // convertScaleAbs(=スケーリング後に絶対値を計算し,結果を8ビットに変換)
42
+
43
+ cv::convertScaleAbs(sobel_image, output_image, 1, 0);
44
+
45
+
46
+
47
+ // 閾値以上の場合にエッジ(=白)と見なす(入力画像,出力画像,閾値,最大値,閾値タイプ)
48
+
49
+ // cv::threshold(output_image, output_image, 64, 255, cv::THRESH_BINARY);
50
+
51
+
52
+
53
+ // 画像の保存と表示
54
+
55
+ cv::imwrite("output.jpg", output_image);
56
+
57
+ cv::waitKey();
58
+
59
+ return 0;
60
+
61
+ }
62
+
63
+ ```
2
64
 
3
65
 
4
66
 

1

原因

2021/04/21 05:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,75 +1,15 @@
1
1
  C++でOpenCVを使わないで、ソベルフィルタを実装したいのですが実行時に処理が終わらないです。
2
-
3
- 何が間違っているのか教えてください。
4
-
5
- プログラムはこのようにしました。
6
-
7
- ```C++
8
-
9
- #include <iostream>
10
-
11
- #include <opencv2/opencv.hpp>
12
-
13
- int main()
14
-
15
- {
16
-
17
- // 画像を格納するオブジェクトを宣言する
18
-
19
- cv::Mat_<uchar> src, out;
20
-
21
- // 画像ファイルから画像データを読み込む
22
-
23
- src = cv::imread("/Users/Desktop/test.jpg", cv::IMREAD_GRAYSCALE);
24
-
25
- // srcと同じサイズで画像を作成する。初期値を0にする。
26
-
27
- out = cv::Mat_<uchar>(src.size(), 0);
28
-
29
- // ソベルフィルタ
30
-
31
- for (int y = 1; y < src.rows - 1; y++) {
32
-
33
- for (int x = 1; x < src.cols - 1; x++) {
34
-
35
- int fx,fy;
36
-
37
- double sum, value;
38
-
39
- fx= -src(y-1,x-1)+ src(y-1,x+1)
40
-
41
- -2*src(y, x - 1)+ 2 * src(y, x + 1)
42
-
43
- -src(y+1,x-1) + src(y + 1, x + 1);
44
-
45
- fy= -src(y-1,x-1)-2*src(y-1,x)-src(y-1,x+1)
46
-
47
- +src(y+1,x-1)+2*src(y+1,x)+src(y+1,x+1);
48
2
 
49
3
 
50
4
 
51
- sum = ( fx*fx + fy*fy );
5
+ 追記
52
6
 
53
- value = sqrt(sum);
54
-
55
-           value *= 2;
7
+ 終わらなかったのは、末尾に
56
-
57
- value = abs(value);
58
-
59
- out(y, x) = cv::saturate_cast<uchar>(value);
60
-
61
- }
62
-
63
- }
64
-
65
- cv::imwrite("result.jpg", out); //結果出力
66
-
67
- cv::waitKey(); //入力待ち
68
-
69
- return 0;
70
-
71
- }
72
8
 
73
9
  ```
74
10
 
11
+  cv::waitKey();
12
+
13
+ ```
14
+
75
- 申し訳ござません。何が必要な情報なのかもわからないの、随時教えてください
15
+ を入れてたためした