数字のいずれかがk
の場合、の値をa[][]
の値に置き換えます。したがって、num
のすべての値は、k
の各場所に対応しています。例えばk
が20に達した場合、2dの配列に20があれば、私はnum[19]
にあるものをすべて20に置き換えたいと思いますが、試してみるとそれらはすべて歪んだ数字になり、その理由を見つけることができません。私のforループが間違って設定されているのでしょうか、それ以外に問題がありますか?1d配列を使用して2d配列の値を変更するにはどうすればよいですか?
#include<iostream>
int main(){
//other code that uses a file to make 2d array
int width, height, maxval;
fin >> P2 >> width >> height >> maxval;
int **a = new int *[height];
for (int i = 0; i < height; i++)
a[i] = new int[width];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
fin >> a[i][j];
}
}
}
void eq(int **a, int h, int w) {
int num[255];
double num1[255];
double prob[255], cumul[255]{ 0 };
double x, y, z=0;
for (int k = 1; k <= 255; k++)
{
int temp = 0;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {//counts the repeated pixel values
if (pix[i][j] == k)
{
temp += 1;
}
}
}
num1[k - 1] = temp;
}
for (int i = 0; i < 255; i++) {
prob[i] = (num1[i]/(height*width));//show the decimal number of how many pixel values are in the image over the total
cout << prob[i] << endl;
}
for (int i = 0; i < 255; i++) {
y = prob[i];
x = y + z;
z = x;// adds all the probabilities to make the sum
cumul[i] =x;
cout << cumul[i] << endl;
}
for (int i = 0; i < 255; i++) {
num[i] =floor(cumul[i]*255);// converts the cumulative number to the new pixel value and sets it in a array
}
for (int k = 1; k <= 255; k++) {//loop that is not coming out right
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (a[i][j] == k)
{
a[i][j] =num[k-1];
}
}
}
}
}
基本的に私は、PGM画像をより明確にするためにヒストグラム均等化を扱う機能を作っています。 main関数では、pgmファイルを呼び出して、すべてのピクセル値を2次元配列に設定しています。だからnum[]
は私が新しいピクセル値を作る部分ですが、何かの理由で私が例えばa[0][0]
と呼んだときには、それらの値が両方とも対応する強度を持っていないことを意味するので、私がそれを呼び出すたびに、私は255か他の乱数を得る。
私はA [] [をasume ]とnum []はあなたがこれを作るときにいっぱいですか? –
Yea a [] []はメイン関数を埋めるポインタであり、num []はvoidで作成されています。 – Johnny
私に喜ばれますか?(1)[] []がどのように宣言され、どのスコープと(2 )あなたが得ている出力。 –