PDA

نسخه کامل مشاهده نسخه کامل : پردازش تصوير



fazi
24-11-2006, 07:52
سلام من يك سوال دارم .
همونطور كه مي دونيد يه عكس با پسوند tif يه فايل كه فقط شامل يك سري عدد . حالا من مي خوام از اين همه عدد پشت سر هم عكس رو توليد كنم يا به زبون ديگه عكس رو displayكنم . كي كد اين كار رو به زبان C# بلده؟

someone
24-11-2006, 16:01
سلام.
متوجه منظورتون نشدم. بيشتر توضيح بديد.
ميخوايد از يك Stream تصوير توليد كنيد؟
يا فقط مي خوايد يك تصوير tif رو نشون بديد؟

fazi
24-11-2006, 22:44
سلامي
ببين نشون دادن يه Stream . يعني فكر كن يه سري عدد پشت سر هم كه تشكيل يه عكس رو مي ده داخل يه فايلي به نام img.tif
ذخيره شده و من ميخوام اين عدد ها ر بخونم و عكسي كه نشون دهنده اين اعداد روي صفحه نمايش نشون بدم .

someone
09-12-2006, 01:43
سلام.
میتونید از stream ها در #C استفاده کنید. ولی باید با ساختار tif آشنا باشید.
باید بدونید که Header فایل رو چطور بنویسید تنها کافی نیست که یک سری عدد رو به ترتیب
پشت هم قرار بدید. باید از Codec خاصی استفاده کنید. چقدر آشنا هستید؟
تا حالا یه فایل bmp نوشتید؟

fazi
12-12-2006, 14:36
ببينيد من در اين مورد اصلا اطلاعات خاصي ندارم.
ولي كاري كه مي خوام انجام بشه دقيقا اينه. يك فايل دارم كه پر از داده است . به اسم test.dat يك فايل پر از عدد . اصلا ديگه با tiff كاري ندارم. مي دونم كه اعدادي كه در اين فايل ذخيره شده هر كدوم نشون دهنده يك رنگ . مي خوام عكسي كه از اين اعداد به دست مي آد رو نشون بدم. ببينيد كد اين برنامه در دلفي مي تونه به صورت زير باشه. من اين كد رو به c# مي خوام.
var
i,j:integer;
colo : Byte;
fp : file of Byte;

begin
assignfile(fp,Name);
reset(fp);
for i:=1 to 2048 do
for j:=1 to 2048 do
begin
read(fp,colo);
form1.image1.canvas.Pixels[j-1,i-1]:=RGB(colo,colo,colo);
end;

end

mohseni12345
13-12-2006, 23:45
سلام.
میتونید از stream ها در #C استفاده کنید. ولی باید با ساختار tif آشنا باشید.
باید بدونید که Header فایل رو چطور بنویسید تنها کافی نیست که یک سری عدد رو به ترتیب
پشت هم قرار بدید. باید از Codec خاصی استفاده کنید. چقدر آشنا هستید؟
تا حالا یه فایل bmp نوشتید؟

میشه در مورد codec و headr فایلها اموزشی چیزی بدی یا اینکه یه منبع معرفی کنی؟
و اگه نمیشه پس خواهشا طریقه نوشتن فایل bmp رو بگو
اخه من دارم روی پردازش تصویر کار میکنم و و اونا رو به ماتریس تبدیل می کنم و ویرایش لازم رو روش انجام میدم ولی در سیو کردنش مشکل دارم

fazi
14-12-2006, 11:56
ببین من یک کد برای کاری که می خوام انجام بدم نوشتم. این کد اجرا می شه و درست هم کار می کنه. فقط یکمی برنامه کند اجرا می شه. ببینید شما راه بهتری سراغ دارید .
**************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication29
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{

Rectangle rect = new Rectangle(0, 0, 2048, 2048);

e.Graphics.DrawImage(ima.ime1.sjd(), rect);
}
}
}

namespace ima
{
class ime1
{
public static Bitmap sjd()
{
int j, c, l;
l = 0;
FileStream fs = File.Open("c:\\b1.dat", FileMode.Open);
Bitmap res = new Bitmap(2048, 2048);
Color cc;

for (j = 0; j < 2048; j++)
for (c = 0; c < 2048; c++)
{
int re = fs.ReadByte();
cc = Color.FromArgb(re,re,re);
res.SetPixel(c, j, cc);
l++;
}

fs.Close();
return res;


}

}

}

someone
16-12-2006, 02:33
سلام.
میبخشید جواب دادنم طول کشیده. یه مقدار سرم شلوغه.
برنامه تون خیلی خوب نوشته شده. کندی به خاطر اندازه ی تصویر هست و البته SetPixel یه مقدارکند هست.
شما در برنامتون 2048*2048 بار از این تابع و ReadByte استفاده میکنید.
من پیشنهاد میکنم که اول محتویات file تون رو در حافظه Buffer کنید بعد رو داده ها کار کنید.

someone
16-12-2006, 02:36
میشه در مورد codec و headr فایلها اموزشی چیزی بدی یا اینکه یه منبع معرفی کنی؟
و اگه نمیشه پس خواهشا طریقه نوشتن فایل bmp رو بگو
اخه من دارم روی پردازش تصویر کار میکنم و و اونا رو به ماتریس تبدیل می کنم و ویرایش لازم رو روش انجام میدم ولی در سیو کردنش مشکل دارم


سلام.
سلام.
یک فایل Bitmap شامل این قسمت ها هست :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بطور خلاصه وقتی می خواید یک Bitmap رو در حافظه load کنید مراحل به این شکل هست :
اول به یک structure نیاز هست که BFH رو در خودش نگهداره این اطلاعات شاملfiletype, … filesize ,
میشه.دوم به یک structure نیاز هست که اطلاعات تصویر رو در خودش نگه داره یعنی BIH
این ساختار اطلاعاتی مثل width , height , bitCount,…. رو در خودش نگه داری میکنه.
سوم اطلاعات مربوط به Palette هست و چهارم اطلاعات خود Bitmap
حالا برای ذخیره کردن یک فایل Bitmap باید به همین شکل عمل بشه
یعنی اول نوشتن data های مربوط به فایل (size , type) و بعد data مربوط به Bitmap
(width,height,bitCount) و بعد نوشتن data های مربوط به Bitmap هست.
البته باید در نظر داشته باشید که از چه offset ی شروع به نوشتن کنید.
مثلا در Offset 0 به اندازه ی 2Bytes دو حرف B وM قرار میگیره و در Offset 2 که 4Bytes هست
اندازه ی فایل (File Header) و .......
در مورد Comprestion یا codec هم باید اضافه کنم معمولا از RLE استفاده میشه که در Offset 30 قرار داره.
بحث خیلی مفصلی هست.
اگه تحت Windows برنامه مینویسید می تونید از این دو structure استفاده کنید.
BITMAPFILEHEADER
BITMAPINFOHEADER
در موردشون میتونید اطلاعات خوبی پیدا کنید.
اگه با C# کار میکنید به راحتی میتونید از متود Save استفاده کنید که در کلاس Bitmap قرار داره.
با چه زبانی کار میکنید و چه کامپایلری ؟

fazi
16-12-2006, 07:44
می دونید امتحان کردم. یعنی اول محتویات فایل رو توی آرایه قرار دادم بعد سعی کردم اون رو نمایش بدم ولی بازم کند بود.
تابع های معادلی نیست که این کار رو سریعتر انجام بده ؟ آخه من باید کلی پردازش های دیگه هم روی این عکس انجام بدم اگه اینقده کند باشه که نمی شه.
بزرگی عکس هم بخاطر اینه که یک تصویر ماهواره ای که از زمین گرفته شده. استاد ما رشته ش Remote Sensing بوده برای همین ما با این عکس ها کار می کنیم.

mohseni12345
16-12-2006, 12:08
سلام.
سلام.
یک فایل Bitmap شامل این قسمت ها هست :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بطور خلاصه وقتی می خواید یک Bitmap رو در حافظه load کنید مراحل به این شکل هست :
اول به یک structure نیاز هست که BFH رو در خودش نگهداره این اطلاعات شاملfiletype, … filesize ,
میشه.دوم به یک structure نیاز هست که اطلاعات تصویر رو در خودش نگه داره یعنی BIH
این ساختار اطلاعاتی مثل width , height , bitCount,…. رو در خودش نگه داری میکنه.
سوم اطلاعات مربوط به Palette هست و چهارم اطلاعات خود Bitmap
حالا برای ذخیره کردن یک فایل Bitmap باید به همین شکل عمل بشه
یعنی اول نوشتن data های مربوط به فایل (size , type) و بعد data مربوط به Bitmap
(width,height,bitCount) و بعد نوشتن data های مربوط به Bitmap هست.
البته باید در نظر داشته باشید که از چه offset ی شروع به نوشتن کنید.
مثلا در Offset 0 به اندازه ی 2Bytes دو حرف B وM قرار میگیره و در Offset 2 که 4Bytes هست
اندازه ی فایل (File Header) و .......
در مورد Comprestion یا codec هم باید اضافه کنم معمولا از RLE استفاده میشه که در Offset 30 قرار داره.
بحث خیلی مفصلی هست.
اگه تحت Windows برنامه مینویسید می تونید از این دو structure استفاده کنید.
BITMAPFILEHEADER
BITMAPINFOHEADER
در موردشون میتونید اطلاعات خوبی پیدا کنید.
اگه با C# کار میکنید به راحتی میتونید از متود Save استفاده کنید که در کلاس Bitmap قرار داره.
با چه زبانی کار میکنید و چه کامپایلری ؟

ببین من ویژوال بیسیک کار می کنم
و به خاطر اینکه ویژوال محدودیت های زیادی داره شروع کردم به یادگیری سی و سی پلاس پلاس به خاطر همین اونقدرا حرفه ای نشدم تا اینا که گفتیو بفهمم
میشه یه نمونه بزاری؟

someone
16-12-2006, 22:55
دوباره سلام.
یه نمونه کد براتون گذاشتم. همنطور که میبینید تمام مراحلی که در موردشون صحبت کردیم
توش به کار رفته. این کد یه 24bits Bitmap ایجاد میکنه. بدون compression
اگه مشکلی پیش اومد اطلاع بدید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Mehran NZ
31-01-2008, 20:03
سلام.
سلام.
یک فایل Bitmap شامل این قسمت ها هست :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بطور خلاصه وقتی می خواید یک Bitmap رو در حافظه load کنید مراحل به این شکل هست :
اول به یک structure نیاز هست که BFH رو در خودش نگهداره این اطلاعات شاملfiletype, … filesize ,
میشه.دوم به یک structure نیاز هست که اطلاعات تصویر رو در خودش نگه داره یعنی BIH
این ساختار اطلاعاتی مثل width , height , bitCount,…. رو در خودش نگه داری میکنه.
سوم اطلاعات مربوط به Palette هست و چهارم اطلاعات خود Bitmap
حالا برای ذخیره کردن یک فایل Bitmap باید به همین شکل عمل بشه
یعنی اول نوشتن data های مربوط به فایل (size , type) و بعد data مربوط به Bitmap
(width,height,bitCount) و بعد نوشتن data های مربوط به Bitmap هست.
البته باید در نظر داشته باشید که از چه offset ی شروع به نوشتن کنید.
مثلا در Offset 0 به اندازه ی 2Bytes دو حرف B وM قرار میگیره و در Offset 2 که 4Bytes هست
اندازه ی فایل (File Header) و .......
در مورد Comprestion یا codec هم باید اضافه کنم معمولا از RLE استفاده میشه که در Offset 30 قرار داره.
بحث خیلی مفصلی هست.
اگه تحت Windows برنامه مینویسید می تونید از این دو structure استفاده کنید.
BITMAPFILEHEADER
BITMAPINFOHEADER
در موردشون میتونید اطلاعات خوبی پیدا کنید.
اگه با C# کار میکنید به راحتی میتونید از متود Save استفاده کنید که در کلاس Bitmap قرار داره.
با چه زبانی کار میکنید و چه کامپایلری ؟

سلام
من اصلا نمی دونم این کدکها چطوری کار می کنن فقط نصبش می کنم و استفاده می کنم
حالا خیلی مشتاقم که در موردش و برنامه نویسیش بیشتر بدونم
اگه یه مقاله یا کتاب کامل که از پایه نحوه نوشتن برنامش و توضیح بده( انگلیسی یا فارسی) ممنون می شم
زبانم هم c++ هستش
ممنون