前提・実現したいこと
C言語で、画像を読み込みハフ変換を行うプログラムを作成途中です。
発生している問題・エラーメッセージ
for文の途中で動作を停止してしまいます。
該当のソースコード
エラーが出ている箇所までのソースコードです #include<stdio.h> #include <stdlib.h> #include"pgmlib.h" void hough( int n ); int main(void) { load_image( 0, "" ); hough( 0 ); return 0; } void hough( int n ) { int j,k,l,m,o,p,x,y,AA,BB,sum,i,h,AAm,aa,bb,h2,aam; int maxh = 0; int minBB = 18900; int maxBB = 0; int maxh2 = 0; int minbb = 6552; int maxbb = 0; double A,B,a,b; int *arr; int *arr2; l = 18900 /*横の座標*/, m = 200; /*縦の座標*/ arr = (int*)malloc(sizeof(int) * l * m); for (j=0; j<l; j++){ for (k=0; k<m; k++){ arr[j * m + k] = 0; } } for (y=0; y<height[n]; y++){ for (x=0; x<width[n]; x++){ if (image[n][x][y] <= 120){ for (A=-1.0; A<=1.0; A+=0.05){ B = -y * A + x; AA = (A + 1) * 100; BB = (B + 63) * 100; arr[BB * m + AA]++; } } } } for (AA=0; AA<=200; AA++){ sum = 0; i = 0; printf("test1-1 \n"); for (BB=0; BB<=18900; BB++){ if (arr[BB * m + AA] >= 1){ sum += arr[BB * m + AA] * arr[BB * m + AA]; i++; } } printf("test1-2 \n"); h = sum / i; printf("test1-3 \n"); if (h > maxh){ printf("test1-4 \n"); maxh = h; AAm = AA; } printf("test1-5 \n"); }
試したこと
2回目のtest1-2まで表示されるのですが、test1-3が表示されずに動作を停止してしまいます。
修正したソースコード
#include<stdio.h> #include <stdlib.h> #include"pgmlib.h" void hough(int n); int main(void) { load_image(0, ""); hough(0); return 0; } void hough(int n) { int j, k, l, m, o, p, x, y, sum, i, indexAm, h, Am, aa, bb, h2, aam, indexA, indexB; int maxh = 0; int minB = 18900; int maxB = 0; int maxh2 = 0; int minbb = 6552; int maxbb = 0; double A, a, b; int arr[40][2583] = {0}; //int arr2[6552][400] = {0}; /* arr = (int*)malloc(sizeof(int) * 3780200); for (j = 0; j < l; j++) { for (k = 0; k < m; k++) { arr[j * m + k] = 0; } } */ for (y = 0; y < height[n]; y++) { for (x = 0; x < width[n]; x++) { if (image[n][x][y] <= 120) { for (A = -1.0; A <= 1.0; A += 0.05) { indexA = A * 20 + 20; indexB = -y * indexA + x + 2520; arr[indexA][indexB]++; } } } } for (indexA = 0; indexA <= 40; indexA++) { sum = 0; i = 0; for (indexB = 0; indexB <= 2583; indexB++) { if (arr[indexA][indexB] >= 1) { sum += arr[indexA][indexB] * arr[indexA][indexB]; i++; } } h = sum / i; if (h > maxh) { maxh = h; indexAm = indexA; } } for (indexB = 0; indexB <= 2583; indexB++) { if (arr[indexAm][indexB] >= 1) { if (indexB <= minB) { minB = indexB; } if (indexB >= maxB) { maxB = indexB; } } }
回答4件
あなたの回答
tips
プレビュー