Вырезать изображение по строкам с помощью обнаружения края и проблемы ориентации изображения [дублировать]

Если вы используете только функцию mail(), вам нужно заполнить конфигурационный файл.

Вам нужно открыть расширение почты и установить SMTP smtp_port и т. д., и самое главное, ваше имя пользователя и пароль. Без этого почта не может быть отправлена. Кроме того, вы можете использовать класс PHPMail для отправки.

-9
задан Praveen Kumar Purushothaman 22 April 2016 в 09:55
поделиться

1 ответ

Рассмотрите это как учебник для начинающих по обработке изображений Matlab. Прочитайте документацию о используемых командах и попробуйте понять, что они делают и почему.

1. Прочтите изображение

Используйте imread , чтобы прочитать изображение в 3D-матрице. Для удобства мы преобразуем его в double в диапазоне [0..1], используя im2double :

>> img = im2double( imread( 'path/to/battety.jpg' ) );

Вы можете проверить размер вашего img с помощью команды size :

>> size( img )
ans =
    1024         768           3

Из результата видно, что ваше изображение имеет 1024 строки, 768 столбцов и 3 канала (красный, зеленый и синий) .

2. Преобразование в черно-белое (порог a.k.a)

Как вы можете видеть, батарея значительно ярче фона и бесцветна. Мы можем выбрать пиксели с большим зазором между самым ярким значением канала до самых темных значений канала в качестве «батарейных» пикселей:

>> bw = (max(img,[],3)-min(img,[],3)) > 0.2;

См. max и min для более подробной информации. Существуют другие методы для порогового изображения, см. graythresh для более подробной информации.

Используя imshow , мы можем видеть, что получилось:

>> imshow(bw,[],'border','tight');

enter image description here [/g18]

Обычно для улучшения результатов порогового значения используются морфологические операции . Вы можете использовать imclose :

>> bw = imclose( bw, ones(25) );

Результат с помощью: enter image description here [/g19]

3. найти угол поворота

Полезной командой very для обработки и работы с изображениями bw является regionprops . Это позволяет вам получать всевозможные приятные свойства. Вы собираетесь использовать его для вычисления 'Orientation' в области «белого» / аккумулятора вашего изображения

>> st = regionprops( bw, 'Orientation' )
st = 
Orientation: 52.8694

Как вы можете видеть, батарея повернута на 52,8 градусов. Используя imrotate , чтобы «выпрямить» батарею

>> rbw = imrotate( bw, -st.Orientation );

. Когда батарея выровнена по оси, вы можете «проецировать» белые пиксели на горизонтальную и вертикальную оси, используя any :

>> pc = any( rbw, 2 ); %// project all rows into a single column 
>> pr = any( rbw, 1 ); %// project all columns into a single row

Теперь вам нужно найти первый и последний пиксели, равные 1 в проекциях. Используйте find для этого:

>> fx = find( pr, 1, 'first');  %// first x coordinate
>> tx = find( pr, 1, 'last');   %// last x coordinat
>> fy = find( pc, 1, 'first');  %// first y coordinate
>> ty = find( pc, 1, 'last');   %// last y coordinate  

. Когда у вас есть координаты углов x, y, вы можете нанести их на повернутое изображение:

>> imshow(rbw,[],'border','tight');
>> hold on; 
>> plot( [fx tx tx fx fx], [fy fy ty ty fy], ':r', 'LineWidth',3);

Выход: enter image description here [/g20]

И координаты:

>> [fx fy tx ty]
ans =
406   608   866   733

Как вы можете видеть, ваша батарея (866-406) пикселей длинна и ( 733-608) пикселей.

40
ответ дан Undo 22 August 2018 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: