PDA

View Full Version : پیدا کردن شماره رنگ پیکسل



dj_dj_dj
چهارشنبه 09 بهمن 1392, 17:09 عصر
سلام دوستان
نمیدونم عنوان رو خوب نوشتم یا نه
من میخوام یه برنامه بنویسم مثلا چیزی توو همین مایه های چراغ راهنمایی رانندگی .یه موقعیت خاص از مانیتور ( یه دایره ) وقتی مثلا رنگش قرمزه هیچ کاری انجام نده برنامه ولی وقتی رنگ اون قسمت پیکسل سبز شد برنامه یه کاری انجام بده ( در واقع میخوام واسه یه چیز یه مکمل بنویسم ) حالا چطوری مثلا بفهمم شماره رنگ اون قسمت سبز رنگ چنده موندم (چندین میلیون رنگ دارین حالا شماره اون کدوم سبزه نمیدونم )

Vitallity
چهارشنبه 09 بهمن 1392, 20:04 عصر
اگر از فرمت رنگی RGB استفاده می‌کنید سبز یه عددی هست کمتر از قرمز و بزرگتر از آبی همچنین میزان دو رنگ دیگه هم باید کمتر از یه مقداری باشه ... از یه ابزار پالت رنگ استفاده کنید و بالاترین مقدار سبز و کمترین مقدار اون رو به دست بیارید.

7khats
پنج شنبه 10 بهمن 1392, 13:52 عصر
سلام می تونین از opencv کمک بگیرین.
http://www.7khatcode.com/1155/%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D8%B1%D9%86%DA%AF-%DB%8C%DA%A9-%D9%BE%DB%8C%DA%A9%D8%B3%D9%84-%D8%AF%D8%B1-opencv

dj_dj_dj
پنج شنبه 10 بهمن 1392, 19:34 عصر
ممنون از دوستان عزیز . از تابع getpixel استفاده کردم
HDC dc = GetDC(NULL);
COLORREF color = GetPixel(dc, x, y);
ReleaseDC(NULL, dc);
cout << color;
هدر فایل windows.h

Ananas
جمعه 11 بهمن 1392, 05:02 صبح
سلام.
رنگی که تابع GetPixel به شما میده یک عدد 32 بیتی هست. که معمولا رنگ 32 بیتی رو به ترتیب :
8 بیت رو برای آلفا و
8 بیت رو برای آبی و
8 بیت رو برای سبز و
8 بیت رو برای رمگ قرمز میگذارن.
حالا برای پیدا کردن اینکه کانال سبز چه عددی بین 0 تا 255 هست، لازمه که از عملیات بیتی استفاده بشه. مثال:

DWORD clr = GetPixel(dc, x, y);
DWORD green_part = (clr >> 8) & 0x000000ffL;

حالا برای اینکه ببینید رنگ شما چقدر آبی و یا چقدر قرمز قاطی داره باید کانال آبی و کانال قرمز رو هم جدا کنید :
DWORD clr = GetPixel(dc, x, y);
DWORD blue_part = (clr >> 16) & 0x000000ffL;
DWORD green_part = (clr >> 8 ) & 0x000000ffL;
DWORD red_part = clr & 0x000000ffL;

این نحوه ی ذخیره شدن رنگها در یک عدد هست که رنگ سبز خالص برابر 0x0000ff00 هست. یعنی :
0x000000ff قرمز و
0x0000ff00 سبز و
0x00ff0000 آبی هست.
حالا بسته به اینکه شما میخواید سبزتون چقدر دقیق باشه و چقدر دامنه ی تغییرات داره میتونید تابعی تعریف کنید که با استفاده از این سه کانال رنگ بگه که رنگ مورد نظر به سبز شما نزدیکه یا نه.