Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 25, 2012 14:48:50

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL Image.fromstring

вообщем есть такой код на питоне
где сверху приходит бинарная строка img_str, потом с помощью PIL

img = Image.fromstring(“L”, (size, size), img_str)
img.save('test_image.png')

проверяю test.dat получен с помощью
fd= open(“test.dat”,'wb')"))
fd.write(img_str)
fd.close()

через интерпертатор картинка валидная
>>> import Image
>>> fd=open(“C:/test.dat”,'rb')
>>> s=fd.read()
>>> len(s)/512
512
>>> im=Image.fromstring(“L”,(512,512),s)
>>> im.show()

пытаюсь прочитать через c++ и opencv
const char *filename = "C:/test.dat";
ifstream infile(filename, fstream::in/*,fstream::binary*/);
	//картинка у нас одноканальная заданного размера
infile.seekg(0,ios::end);
int file_size=infile.tellg();
infile.seekg(0,ios::beg);
std::vector<unsigned char> data(file_size, 0);
infile.read(reinterpret_cast<char*>(&data[0]), file_size); 
cv::Mat img(data);
int c= img.channels();
cv::Mat r= img.reshape(0,512);
imwrite("C:/test.png",r);
картинка получается невалидная.



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#2 Июнь 26, 2012 02:34:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

PIL Image.fromstring

std::ifstream infile(filename, std::ios::binary);



Отредактировано py.user.next (Июнь 26, 2012 02:39:53)

Офлайн

#3 Июнь 26, 2012 08:42:30

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL Image.fromstring

ага, так всё ок, только я не понимаю почему?



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Отредактировано mrgloom (Июнь 26, 2012 08:42:42)

Офлайн

#4 Июнь 26, 2012 09:47:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

PIL Image.fromstring

в текстовом режиме над символами потока могут проводится преобразования, которые не влияют на текст



Офлайн

#5 Июнь 26, 2012 22:40:02

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PIL Image.fromstring

py.user.next, ты еще помнишь С++? Приятно. Я лет пять его не применял :(



Офлайн

#6 Июнь 27, 2012 03:12:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

PIL Image.fromstring

в C++ слишком большой стандарт, да и смысл его изучать
а C изучаю постоянно, чередую с питоном и теорией программирования



Офлайн

#7 Июнь 27, 2012 20:26:54

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

PIL Image.fromstring

мне кажется так будет лучше.

std::ifstream infile(filename, std::ios::binary|std::ios::in);



Офлайн

#8 Июнь 28, 2012 04:11:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

PIL Image.fromstring

ifstream - уже поток ввода



Офлайн

#9 Июнь 28, 2012 08:59:53

mrgloom
От:
Зарегистрирован: 2010-07-22
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

PIL Image.fromstring

std::ifstream infile(filename,std::ios::in,std::ios::binary);

дело было в том компилятор съел и так, а я не заметил что через запятую.



___________________________________________________________________________________________
http://www.lfd.uci.edu/~gohlke/pythonlibs/
https://bitbucket.org/pypy/compatibility/wiki/Home

Офлайн

#10 Июнь 28, 2012 11:36:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9993
Репутация: +  857  -
Профиль   Отправить e-mail  

PIL Image.fromstring

mrgloom
дело было в том компилятор съел и так, а я не заметил что через запятую.

в gcc:
на
std::ifstream infile(filename, std::ios::in, std::ios::binary);

реакция
[guest@localhost tests]$ g++ t.cpp -o t
t.cpp: В функции ‘int main()’:
t.cpp:11:66: ошибка: нет подходящей функции для вызова ‘std::basic_ifstream<char>::basic_ifstream(const char*&, const std::ios_base::openmode&, const std::ios_base::openmode&)’
/usr/lib/gcc/i686-redhat-linux/4.5.1/../../../../include/c++/4.5.1/fstream:455:7: замечание: претенденты: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]
/usr/lib/gcc/i686-redhat-linux/4.5.1/../../../../include/c++/4.5.1/fstream:441:7: замечание: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i686-redhat-linux/4.5.1/../../../../include/c++/4.5.1/iosfwd:111:11: замечание: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)
[guest@localhost tests]$

неверное количество аргументов



Отредактировано py.user.next (Июнь 28, 2012 11:39:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version