Diskuze: Jak zjisti počet černých pixelů a nejtmavší pixel?
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
a co GDI+? To můžeš použít?
nejsem si jisty:-) když budeme vycházet z toho, že mám
struct pixel {
unsigned char blue;
unsigned char green;
unsigned char red;
};
A pole máš předem definované nebo si načteš obrázek za chodu programu?
Zkus tohle https://docs.microsoft.com/…map-getpixel , je to přes GDI+, určitě tam bude i možnost zjištění rozměrů obrázku.
Nehledej v tom nic složitého. Obrazová data jsou reprezentována jako 2D pole pixel struktur. Vytvoříš funkci která přebírá 2D pole jako argument funkce, přes argument budeš vracet strukturu reprezentující nejtmavší pixel (tmavost dle tvého kritéria), návratový typ bude celé číslo reprezentující počet černých pixelů (RGB 0,0,0). Vytvoříš celočíselnou proměnnou pro počet černých pixelů, inicializuješ ji na 0. Uložíš si první barevnou složku prvního pixelu. Postupně budeš procházet celé pole pomocí jednoho for cyklu a porovnávat na černý pixel a aktualizovat jejich počet. Stejně tak budeš porovnávat tmavost pixelů a aktualizovat nejtmavší pixel. Nakonec vrátíš hodnoty způsobem uvedeným viz. výše. To je celé.
Nemohl by jsi sem dat priklad? Ale jak urcim nejtmavsi pixel? Budu scitat rgb slozky a hledat minimum z hodnot vetsich jak 0?
Prosim o kod:-)
Zapis RGB nebo RGBA (a tusim ze uplne nej pouziva dokonce 5 barevnych slozek) pouziva windows bitmap, napriklad.
Skolni priklady res pomoci googlu nebo pridej vlastni kod. Takove studium nebo prace, zkopiruji hotove reseni z fora, to vetsina lidi tady moc nepodporuje. 500 kc za kazdou zapocatou hodinu je takova min. sazba.
Nejdriv si teda musis urcit logiku, kterou hledas. Nejtmavvi pixel je ten, ktery pro rezim sedi ma nejmensi hodnotu. Takze hledas nejmensi cislo z pole. To je typicky skolni priklad pro stredni skolu.
Co je vsak dulezitejsi, je uvedomit si, ze rgb (barvy) neni gray-scale
(odstiny sedi). Tudiz barevny model bude treba prevest na jiny, ktery ma v sobe
slozku, ktera se vyuziva jako odstiny sedi (chroma). To je naprikla HSV, HSL...,
jasove slozky YgCrCm nebo jine
google = rgb to hsv
https://en.wikipedia.org/…/HSL_and_HSV
Y 601 ′ = 0.2989 ⋅ R + 0.5870 ⋅ G + 0.1140 ⋅ B (SDTV)
Y 240 ′ = 0.212 ⋅ R + 0.701 ⋅ G + 0.087 ⋅ B (Adobe)
Y 709 ′ = 0.2126 ⋅ R + 0.7152 ⋅ G + 0.0722 ⋅ B (HDTV)
Y 2020 ′ = 0.2627 ⋅ R + 0.6780 ⋅ G + 0.0593 ⋅ B (UHDTV, HDR)
Jestli to spravne chapu, tak ten posledni vzorec je nejnovejsi tv standard
pro vypocet jasove slozky (odstiny sedi), Y 2020. Ten prvni je zase ten, ktery
najdes ve vetsine literatury, Y 601.
Otazkou je, zda vas ucitel myslel skutecne barvy nebo mu jde jen o nalezeni
nejmensiho cisla.
V podstate by slo udelat i prumer vsech 3 barev a najit to nejmensi cislo. Ale to neni obrazkove spravny postup.
Zde máš kus příkladu na kterém můžeš stavět
// Color data generator
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// #define DEBUG
#define M 64 // rows
#define N 64 // cols
#define MIN 0 // minimal color value
#define MAX 255 // maximal color value
struct pixel {
unsigned char blue;
unsigned char green;
unsigned char red;
};
int main(void) {
struct pixel color_data[M][N];
struct pixel darkness;
unsigned int nBlack;
srand((unsigned)time(NULL));
// Generating RGB color data
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
color_data[i][j].red = (rand() % (MAX - MIN + 1)) + MIN;
color_data[i][j].green = (rand() % (MAX - MIN + 1)) + MIN;
color_data[i][j].blue = (rand() % (MAX - MIN + 1)) + MIN;
}
}
#ifdef DEBUG
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
printf("RGB(%d,%d,%d)\n", color_data[i][j].red, color_data[i][j].green, color_data[i][j].blue);
}
}
#endif
// darkness, nBlack???
// ...
return 0;
}
Jak už jsem psal v příspěvku výše, tmavost má různá kritéria. Pro tvé potřeby bohatě postačí, že nejtmavší barva bude ta, kde součet barevných složek bude nejnižší. Černá barva má složky RGB(0,0,0).
Tvým úkolem je naplnit proměnné darkness reprezentující nejtmavší pixel a nBlack reprezentující počet černých pixelů.
Zobrazeno 10 zpráv z 10.