質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1481閲覧

Hilditchの方法による二値画像の細線化の警告

BASEBALL-Y

総合スコア67

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/04/26 03:23

#質問内容
以下のコードを記述すると,
warning C4715: 'ccons': 値を返さないコントロール パスがあります。
と警告が表示されます.
解決策がありましたら教えて頂けると幸いです.

##質問箇所のコード

C

1void main(void) 2{ 3画像の読み込み; 4 5//細線化の関数を呼び出す 6Thinning(get_otsu, get_thinning); 7 8画像を保存; 9 10} 11 12//Hilditchの方法による二値画像の細線化を行うための関数 13void Thinning(unsigned char image_in[Y_SIZE][X_SIZE], unsigned char image_out[Y_SIZE][X_SIZE]) 14{ 15 int ia[9], ic[9], i, ix, iy, m, ir, iv, iw; 16 17 for (iy = 0; iy < Y_SIZE; iy++) 18 { 19 for (ix = 0; ix < X_SIZE; ix++) 20 { 21 image_out[iy][ix] = image_in[iy][ix]; 22 } 23 } 24 25 m = 100; 26 ir = 1; 27 28 while (ir != 0) 29 { 30 ir = 0; 31 32 //端は取り除いているのか? 33 for (iy = 1; iy < Y_SIZE-1; iy++) 34 { 35 for (ix = 1; ix < X_SIZE-1; ix++) 36 { 37 if (image_out[iy][ix + 1] != HIGH) 38 { 39 continue; 40 } 41 42 ia[0] = image_out[iy][ix + 1]; 43 ia[1] = image_out[iy - 1][ix + 1]; 44 ia[2] = image_out[iy][ix - 1]; 45 ia[3] = image_out[iy - 1][ix - 1]; 46 ia[4] = image_out[iy][ix - 1]; 47 ia[5] = image_out[iy + 1][ix - 1]; 48 ia[6] = image_out[iy + 1][ix]; 49 ia[7] = image_out[iy + 1][ix + 1]; 50 51 for (i = 0; i < 8; i++) 52 { 53 if (ia[i] == m) 54 { 55 ia[i] = HIGH; 56 ic[i] = 0; 57 } 58 else 59 { 60 if (ia[i] < HIGH) 61 { 62 ia[i] = 0; 63 ic[i] = ia[i]; 64 } 65 } 66 } 67 68 ia[8] = ia[0]; 69 ic[8] = ic[0]; 70 71 if (ia[0] + ia[2] + ia[4] + ia[6] == HIGH * 4) 72 { 73 continue; 74 } 75 76 for (i = 0, iv = 0, iw = 0; i < 8; i++) 77 { 78 if (ia[i] == HIGH) 79 { 80 iv++; 81 } 82 if (ic[i] == HIGH) 83 { 84 iw++; 85 } 86 } 87 88 if (iv <= 1) 89 { 90 continue; 91 } 92 if (iw == 0) 93 { 94 continue; 95 } 96 97 if (ccons(ia) != 1) 98 { 99 continue; 100 } 101 102 if (image_out[iy - 1][ix] == m) 103 { 104 ia[2] = 0; 105 106 if (ccons(ia) != 1) 107 { 108 continue; 109 } 110 111 ia[2] = HIGH; 112 } 113 114 if (image_out[iy][ix - 1] == m) 115 { 116 ia[4] = 0; 117 if (ccons(ia) != 1) 118 { 119 continue; 120 } 121 ia[4] = HIGH; 122 } 123 124 image_out[iy][ix] = m; 125 ir++; 126 127 } 128 } 129 130 m++; 131 } 132 133 for (iy = 0; iy < Y_SIZE; iy++) 134 { 135 for (ix = 0; ix < X_SIZE; ix++) 136 { 137 if (image_out[iy][ix] < HIGH) 138 { 139 image_out[iy][ix] = 0; 140 } 141 } 142 } 143} 144 145 146//連結数を調べるために関数 147int ccons(int inb[9]) 148{ 149 int i, icn; 150 icn = 0; 151 152 for (i = 0; i < 8; i += 2) 153 { 154 if (inb[i] == 0) 155 { 156 if (inb[i + 1] == HIGH || inb[i + 2] == HIGH) 157 { 158 icn++; 159 160 return icn; 161 } 162 163 } 164 } 165}

#参考資料
Hilditchの方法による二値画像の細線化

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ccons関数で、ifに引っかからない場合を考えてみればいいかと

投稿2020/04/26 03:34

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BASEBALL-Y

2020/04/26 03:53

ありがとうございました. 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問