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

質問編集履歴

2

修正

2021/04/21 05:11

投稿

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

1

原因

2021/04/21 05:11

投稿

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