Artificial Intelligence - هوش مصنوعی  
انجمن را در گوگل محبوب کنيد :

بازگشت   Artificial Intelligence - هوش مصنوعی > پردازش تصویر > پردازش تصوير(Image Processing)


 
تبليغات سايت
Iranian Association for the Advancement of Artificial Intelligence
ارسال تاپيک جديد  پاسخ
 
LinkBack ابزارهاي تاپيک نحوه نمايش
قديمي ۰۴-۲۸-۱۳۹۲, ۰۶:۱۷ بعد از ظهر   #1 (لینک دائم)
عضو جدید
 
آواتار N-5
 
تاريخ عضويت: فروردين ۱۳۹۲
پست ها: 5
تشكرها: 0
0 تشكر در 0 پست
پيش فرض نمایش تصویر خاکستری در pictureBox

سلام
برای برنامه ای نیاز دارم تصویر رنگی که توسط کد زیر به تصویر خاکستری تبدیل کردم را در VC++ 2010 در pictureBox نمایش بدهم:
كد:
Mat src_gray;
cvtColor( src, src_gray, CV_BGR2GRAY );
کدی که برای نمایش در pictureBox استفاده می کنم به صورت زیر است:
كد:
System::Drawing::Graphics^ graphics = pictureBox1->CreateGraphics();
System::IntPtr ptr(src.ptr());
System::Drawing::Bitmap^ b  = gcnew System::Drawing::Bitmap(src.cols,src.rows,src.step,System::Drawing::Imaging::PixelFormat::Format24bppRgb,ptr);
System::Drawing::RectangleF rect(0,0,control->Width,control->Height);
graphics->DrawImage(b,rect);
این کد تصویر رنگی را بدون مشکل نمایش می دهد ولی وقتی تصویر خاکستری به آن می دهم، تصویر را سه بار کنار هم تکرار می کند.

اگر کد را به صورت زیر تغییر دهم، تصویر یک بار نمایش داده می شود ولی با رنگهای نادرست:
كد:
System::Drawing::Bitmap^ b  = gcnew System::Drawing::Bitmap(grayImage.cols,grayImage.rows,grayImage.step,System::Drawing::Imaging::PixelFormat::Format8bppIndexed,ptr);
ممنون می شم اگه راهنمایی کنید که چه تغییری در کد باید ایجاد کنم تا تصویر خاکستری به صورت صحیح نمایش داده بشه
N-5 آفلاين است   پاسخ با نقل قول

  #ADS
نشان دهنده تبلیغات
تبليغگر
 
 
 
تاريخ عضويت: -
محل سكونت: -
سن: 2010
پست ها: -
 

نشان دهنده تبلیغات is online  
قديمي ۰۴-۲۸-۱۳۹۲, ۰۸:۵۸ بعد از ظهر   #2 (لینک دائم)
Super Moderator
 
آواتار raha_hakhamanesh
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: دنیا
پست ها: 281
تشكرها: 28
253 تشكر در 147 پست
My Mood: Zodranj
پيش فرض

نقل قول:
نوشته اصلي بوسيله n-5 نمايش پست
سلام
کدی که برای نمایش در picturebox استفاده می کنم به صورت زیر است:
كد:
system::drawing::graphics^ graphics = picturebox1->creategraphics();
system::intptr ptr(src.ptr());
system::drawing::bitmap^ b  = gcnew system::drawing::bitmap(src.cols,src.rows,src.step,system::drawing::imaging::pixelformat::format24bpprgb,ptr);
system::drawing::rectanglef rect(0,0,control->width,control->height);
graphics->drawimage(b,rect);
این کد تصویر رنگی را بدون مشکل نمایش می دهد ولی وقتی تصویر خاکستری به آن می دهم، تصویر را سه بار کنار هم تکرار می کند.

ممنون می شم اگه راهنمایی کنید که چه تغییری در کد باید ایجاد کنم تا تصویر خاکستری به صورت صحیح نمایش داده بشه


به نام خدا
تصویر خاکستری که می فرمایید سه بار نمایش داده میشه از کجا بدست آمده؟ خودتان تولید می کنید یا از فایل می خوانید.
ممکن است اگر از فایل می خوانید آن تصویر ظاهرا سیاه و سفید باشد ولی واقعا در قالب یک فایل رنگی ذخیره شده باشد.
حتما می دانید اگر مقادیر سه لایه r, b, g دارای مقدار یکسان باشند تصویر سیاه و سفید دیده می شود ولی در حقیقت سه لایه دارد.

بررسی کنید اگر نشد مجدد بحث رو دنبال می کنیم
موفق باشید
.
__________________
.
.
.
برای تشکر دکمه مخصوص وجود دارد لطفا پست هرز ایجاد نکنید
.
.
اینقدر از دسترسی نداشتن به مقاله شیون نکنید

مقالات انگلیسی: ایران سای (ISI, IEEE, ACM)
مقالات فارسی: سیویلیکا (کنفرانس داخلی)
مقالات فارسی: مگ ایران (ژورنالهای داخلی)
raha_hakhamanesh آفلاين است   پاسخ با نقل قول
قديمي ۰۴-۲۹-۱۳۹۲, ۱۲:۰۷ قبل از ظهر   #3 (لینک دائم)
عضو جدید
 
آواتار N-5
 
تاريخ عضويت: فروردين ۱۳۹۲
پست ها: 5
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

تصویری که سه بار نمایش داده می شود تصویری است که توسط دستور imread از ورودی خوانده ام و با دستور
كد:
cvtColor( src, src_gray, CV_BGR2GRAY );
به تصویر خاکستری تبدیل کردم. اگر با دستور imshow آن را نمایش بدهم مشکلی وجود ندارد و تصویر سطح خاکستری به درستی نمایش داده می شود ولی وقتی در pictureBox نشان داده می شود مشکلاتی که گفتم پیش می آید.
احتمالاً علت سه بار نمایش دادن آن هم این است که هر سه لایه r، g و b را کنار هم نمایش می دهد و چون تبدیل به سطح خاکستری شده هر سه سیاه و سفید هستند ولی مشکل این است که نمی دانم چطور باید فقط یکی را نمایش بدهم.
ضمناً اگر از Format24bppRgb استفاده کنم سه تصویر خاکستری کنار هم می دهد، اگر از Format16bppGrayScale استفاده کنم خطا می دهد و اگر از Format8bppIndexed استفاده کنم یک تصویر با رنگ های نادرست نشان می دهد. متاسفانه نتوانستم خروجی را اینجا قرار دهم تا نتیجه را ببینید.
متشکرم
N-5 آفلاين است   پاسخ با نقل قول
قديمي ۰۴-۲۹-۱۳۹۲, ۰۳:۵۳ قبل از ظهر   #4 (لینک دائم)
Active users
 
آواتار mahdiii
 
تاريخ عضويت: اسفند ۱۳۸۸
محل سكونت: مشهد
پست ها: 355
تشكرها: 27
167 تشكر در 131 پست
My Mood: Khoshhal
پيش فرض

به نظر من دستور cvtColor به این صورت که نوشتید تصویر رنگی رو به تصویر خاکستری تبدیل می کنه
یعنی یه تصویر با سه کانال به یه کانال تبدیل میشه
این طوری نیست که می گین همون سه کاناله با مقادیر یکسان.
فکر نکنم این طوری باشه. همون خروجیش یه کانالست
خیلی راحت وقتی خط به خط اجرا می کنین چک کنین ببینین src_gray یه کانالست یا سه کاناله
که احتمالا یه کاناله باید باشه یعنی CV_8UC1 هست
mahdiii آفلاين است   پاسخ با نقل قول
قديمي ۰۴-۲۹-۱۳۹۲, ۰۴:۳۶ قبل از ظهر   #5 (لینک دائم)
Super Moderator
 
آواتار raha_hakhamanesh
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: دنیا
پست ها: 281
تشكرها: 28
253 تشكر در 147 پست
My Mood: Zodranj
پيش فرض

نقل قول:
نوشته اصلي بوسيله N-5 نمايش پست
تصویری که سه بار نمایش داده می شود تصویری است که توسط دستور imread از ورودی خوانده ام و با دستور
كد:
cvtColor( src, src_gray, CV_BGR2GRAY );
احتمالاً علت سه بار نمایش دادن آن هم این است که هر سه لایه r، g و b را کنار هم نمایش می دهد و چون تبدیل به سطح خاکستری شده هر سه سیاه و سفید هستند ولی مشکل این است که نمی دانم چطور باید فقط یکی را نمایش بدهم.
متشکرم

به نام خدا
قطعه کد زیر را ببینید، ان شاالله مشکلتان را حل کند (پارامتر IPL_DEPTH_8U در حل مشکل شما کلیدی است)

كد:
// C
IplImage *im_rgb  = cvLoadImage("image.jpg");
IplImage *im_gray = cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);
 
// C++
Mat im_rgb  = imread("image.jpg");
Mat im_gray;
cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
__________________
.
.
.
برای تشکر دکمه مخصوص وجود دارد لطفا پست هرز ایجاد نکنید
.
.
اینقدر از دسترسی نداشتن به مقاله شیون نکنید

مقالات انگلیسی: ایران سای (ISI, IEEE, ACM)
مقالات فارسی: سیویلیکا (کنفرانس داخلی)
مقالات فارسی: مگ ایران (ژورنالهای داخلی)
raha_hakhamanesh آفلاين است   پاسخ با نقل قول
قديمي ۰۴-۲۹-۱۳۹۲, ۰۵:۴۰ قبل از ظهر   #6 (لینک دائم)
عضو جدید
 
آواتار N-5
 
تاريخ عضويت: فروردين ۱۳۹۲
پست ها: 5
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

نقل قول:
نوشته اصلي بوسيله mahdiii نمايش پست
به نظر من دستور cvtColor به این صورت که نوشتید تصویر رنگی رو به تصویر خاکستری تبدیل می کنه
یعنی یه تصویر با سه کانال به یه کانال تبدیل میشه
این طوری نیست که می گین همون سه کاناله با مقادیر یکسان.
فکر نکنم این طوری باشه. همون خروجیش یه کانالست
خیلی راحت وقتی خط به خط اجرا می کنین چک کنین ببینین src_gray یه کانالست یا سه کاناله
که احتمالا یه کاناله باید باشه یعنی CV_8UC1 هست
شما درست می گید. تصویر با سه کانال به یه کانال تبدیل شد. پس چرا pictureBox همچین خروجی می ده؟
N-5 آفلاين است   پاسخ با نقل قول
قديمي ۰۴-۲۹-۱۳۹۲, ۰۵:۵۹ قبل از ظهر   #7 (لینک دائم)
عضو جدید
 
آواتار N-5
 
تاريخ عضويت: فروردين ۱۳۹۲
پست ها: 5
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

نقل قول:
نوشته اصلي بوسيله raha_hakhamanesh نمايش پست
به نام خدا
قطعه کد زیر را ببینید، ان شاالله مشکلتان را حل کند (پارامتر IPL_DEPTH_8U در حل مشکل شما کلیدی است)

كد:
// C
IplImage *im_rgb  = cvLoadImage("image.jpg");
IplImage *im_gray = cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);
 
// C++
Mat im_rgb  = imread("image.jpg");
Mat im_gray;
cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
متاسفانه این راه هم جواب نداد. البته من کد شما رو به این صورت در C++ نوشتم:
كد:
Mat src_gray (src.size(), CV_8U);
ولی وقتی به صورت IPL_DEPTH_8U,1 هم نوشتم باز نتیجه همان شد
N-5 آفلاين است   پاسخ با نقل قول
پاسخ



كاربران در حال ديدن تاپيک: 1 (0 عضو و 1 مهمان)
 

قوانين ارسال
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is فعال
شکلکها فعال است
كد [IMG] فعال است
كدهاي HTML غير فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال




زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۱۲:۵۳ بعد از ظهر ميباشد.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.

Teach and Learn at Hexib | Sponsored by www.Syavash.com and Product In Review

استفاده از مطالب انجمن در سایر سایت ها، تنها با ذکر انجمن هوش مصنوعي به عنوان منبع و لینک مستقیم به خود مطلب مجاز است

Inactive Reminders By Icora Web Design