2017-10-05 6 views
0

私はアレイ機能に関する私の課題の問題に直面しました。 最初の3つの行と最後の3つの行と列に「0」の境界要素を作りたいと思います。まず、256X256サイズの配列を生成することができました(配列[256] [256])。 そして、第一の配列の後にI値から20を減算し、要素値< 127についてアレイ機能(画像処理プロジェクト)

  • 、Iは、例えば.FORいくつかの条件を実行する必要が発生しました。
  • 要素値が127より大きい場合は、値に20を追加します。
  • 操作の後に任意の要素の値が<である場合は、値0を割り当てます。
  • 操作後に任意の要素の値が> 255である場合は、値255を に割り当てます。

問題は、再度生成したときに、要素の「0」境界が異なることです。どのように私は要素の "0"の境界線のように見える最初の配列のようにそれを解決するには?

enter image description here

は、以下の私のC++コードです。あなたの変形例では

#include<stdio.h> 
#include<stdlib.h> 

void main() 
{ 
    int inputimage[256][256], modifinputimage[256][256]; 
    int i, j; 
    char ch; 

    for (i = 0; i < 256; i++) 
    { 
     if (i < 3) 
     { 
      for (j = 0; j < 256; j++) 
      { 
       if (j < 256) 
       { 
        printf("0\t"); 
       } 

      } 
     } 
     else if (i >= 253) 
     { 
      for (j = 0; j < 256; j++) 
      { 
       if (j < 256) 
       { 
        printf("0\t"); 
       } 

      } 
     } 
     else if (i >= 3 && i <253) 
     { 
      for (j = 0; j < 256; j++) 
      { 
       if ((i >= 3 && j < 3) || (i<253 && j >= 253)) 
       { 
         printf("0\t"); 
       } 


       if (j >= 3 && j < 253) 
       { 
        inputimage[i][j] = rand() % 256; 
        printf("%d\t", inputimage[i][j]); 

       } 

      } 
     } 

    } 

    printf("\nProceed to Contrast Adjustment ? (Press ENTER to continue)*** \n\n\n\n"); 
    ch = getche(); 

    for (i = 0; i < 256; i++) 
    { 
     if (i < 3) 
     { 
      for (j = 0; j < 256; j++) 
      { 
       if (j < 256) 
       { 
        printf("0\t"); 
       } 

      } 
     } 
     else if (i >= 253) 
     { 
      for (j = 0; j < 256; j++) 
      { 
       if (j < 256) 
       { 
        printf("0\t"); 
       } 

      } 
     } 
     else if (i >= 3 && i <253) 
     { 
      for (j = 0; j < 256; j++) 
      { 
       if ((i >= 3 && j < 3) || (i<253 && j >= 253)) 
       { 
        printf("0\t"); 
       } 


       if (j >= 3 && j < 253) 
       { 
        if (inputimage[i][j] < 127 && inputimage[i][j] >= 20) 
        { 
         modifinputimage[i][j] = inputimage[i][j] - 20; 
         printf("%1d\t", modifinputimage[i][j]); 
        } 
        if (inputimage[i][j] > 127 && inputimage[i][j] <= 235) 
        { 
         modifinputimage[i][j] = inputimage[i][j] + 20; 
         printf("%1d\t", modifinputimage[i][j]); 
        } 
        if (inputimage[i][j] <= 0) 
        { 

         modifinputimage[i][j] = inputimage[i][j]; 
         printf("0\t"); 
        } 
        if (inputimage[i][j] >= 255) 
        { 

         modifinputimage[i][j] = inputimage[i][j]; 
         printf("255\t"); 
        } 

       } 

      } 
     } 

    } 

} 
+1

ようこそ役立ちます! [デバッガ](https://en.wikipedia.org/wiki/Debugger)を使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

+1

C++?それは純粋なCです。でもC言語でさえ、それは 'int main'です。 –

+0

はい、これはちょうど純粋なCです。しかし、私はまだ私の問題を解決できません。境界要素 – korenhs

答えて

0

あなたは、行と列の両方のポジションを持って開始時に、ループのための2つを使って、行と列で配列にアクセスするためのアプローチを使用する必要があります。例

for (int i = 0; i < 256; i++){ 
    for(int j = 0; j < 256; j++){ 


    } 
} 

あなたが希望

if(i <= 3 || i >= 253){ 
    //here u can use the nested loop to print 0's for both first and last 3 rows 
    printf("0\t"); 
} 

// similarly for columns you can use this 

else if(j <= 3 || j >=253){ 

    printf("0\t"); 
} 

else if(i > 3 && i < 253 && j > 3 && j < 253){ 
    //here your modification rules 
} 

すべての行と列を通って、上記の条件での使用の内部で行っている。この方法では、このスタックオーバーフローの

+0

こんにちは、助けのためのThx.According私は私を共有するが、私はまだ同じ問題に直面しています。 – korenhs

+0

これらの最初の行と最後の行のみが正常ですが、最後の列はまだ0になります – korenhs