Вы не можете сравнивать массивы напрямую, как это
array1==array2
Вы должны сравнить их char-by-char; для этого вы можете использовать функцию и вернуть значение boolean (True: 1, False: 0). Затем вы можете использовать его в тестовом состоянии цикла while.
Попробуйте следующее:
#include <stdio.h>
int checker(char input[],char check[]);
int main()
{
char input[40];
char check[40];
int i=0;
printf("Hello!\nPlease enter a word or character:\n");
scanf("%s",input);
printf("I will now repeat this until you type it back to me.\n");
scanf("%s",check);
while (!checker(input,check))
{
printf("%s\n", input);
scanf("%s",check);
}
printf("Good bye!");
return 0;
}
int checker(char input[],char check[])
{
int i,result=1;
for(i=0; input[i]!='\0' || check[i]!='\0'; i++) {
if(input[i] != check[i]) {
result=0;
break;
}
}
return result;
}
Преобразование изображения в двойное (двойная точность) разрешит проблему, потому что команда imread взяла изображение по умолчанию в формате unit8 (unsigned int).
Проблема заключается в том, что вы не показываете результат правильно.
Ваш результат находится в диапазоне 0-31, но вам нужно преобразовать его в 0-255 для его построения!
do
imshow(mat2gray(z))
[/g0]
imshow(z, [])
, что будет контрастировать с нормализацией результатов для отображения, где минимальное и максимальное значения будут отображаться на [0,1]
. В противном случае, хорошее место!
– rayryeng
20 October 2014 в 18:02
double(z)
; не решит проблему, потому что у вас будут значения, превышающие 1, и будет насыщать изображение при попытке его отображения. Вместо этого используйте im2double
, чтобы сравнить нормализацию интенсивности с [0,1]
.
– rayryeng
22 October 2014 в 17:13
Лучший способ решить эту проблему - не изменить изображение, а изменить способ отображения imshow
. Попробуйте это:
>> imshow(z, [0, 31]);
Или, еще лучше, попробуйте это:
>> imshow(z, []);
, который автоматически масштабирует изображение, сопоставляя минимальное значение с 0 и максимальное значение 255. [/ д2]
im2double
вместо того, чтобы просто кастинг какdouble
, посколькуim2double
также нормализует интенсивности, чтобы они соответствовали между[0,1]
. Простое нажатие наdouble
не будет делать этого. Кроме того, загрузкаimread
в изображении в "по умолчанию"uint8
технически неверен. Точность каждого пикселя определяется в заголовке изображения, котороеimread
анализирует и анализирует. Например, TIF может быть 8, 16 или 24 или 32 бит. Просто большинство изображений используют 8 бит на интенсивность / цвет, поэтому мы, естественно, думаем, что это «по умолчанию». – rayryeng 22 October 2014 в 17:18imshow
для изображений типаdouble
- , предназначенных для , для интенсивностей между[0,1]
, которые визуализируют для интенсивностей между черным и белым. Тот, кто дал вам +1 голос за ваш комментарий, не знает, о чем идет речь. – rayryeng 17 December 2014 в 18:09