У знімка photo.shape дорівнює (240, 320, 3). Що означає перше число?
Чому так. У NumPy перша вісь — та, по якій масив нарізається першою: photo[0] дає перший рядок зображення. Тому порядок у shape — (висота, ширина, канали), хоч у побуті ми й кажемо «фото 320 на 240», починаючи з ширини. Плутанина тут коштує дорого: масив 240×320 і масив 320×240 обидва існують, обидва не викидають помилки, і побачиш ти різницю лише за поверненою набік картинкою.
Питання 2 / 8
Піксель зеленого індикатора має значення R = 45, G = 203, B = 93. Яка його яскравість у відтінках сірого і чому?
Чому так. 0.299 × 45 + 0.587 × 203 + 0.114 × 93 = 143.2. Просте середнє дало б 114 — на 29 рівнів менше, і зелена смужка вийшла б помітно темнішою, ніж її бачить око. Середнє не є неправильним арифметично, воно неправильне фізіологічно: у сітківці найбільше колбочок, чутливих до зеленого, тому зелений предмет здається яскравішим за синій тієї самої фізичної сили. Варіант «найбільше з трьох» — це не grayscale, а канал V у HSV.
Питання 3 / 8
Масив photo має тип uint8, найсвітліший піксель у ньому дорівнює 250. Що станеться з ним після photo + 10?
Чому так. 260 у беззнаковому восьмибітовому числі не існує, і 260 − 256 = 4. Найпідступніше те, що жодної помилки не буде: код відпрацює, а найсвітліші ділянки стануть чорними. Обрізання до 255 роблять cv2.add і np.clip — але тільки якщо ти про них попросив. Автоматичного переходу в ширший тип NumPy теж не робить: у виразі з масивом uint8 результат лишається uint8.
Питання 4 / 8
Ти прочитав фото через cv2.imread і показав через plt.imshow. На екрані небо руде, а помідори сині. Що сталося?
Чому так. OpenCV зберігає канали як B, G, R — це історична спадщина форматів кінця 1990-х, і змінити її вже неможливо. Решта світу працює в RGB. Помилки не виникає, бо масив правильної форми й типу: усі числа на місці, просто не в тих каналах. Ліки — cv2.cvtColor(img, cv2.COLOR_BGR2RGB) одразу після читання. Варіант про те, що в RGB читає саме OpenCV, перевертає причину з наслідком: у RGB працюють усі, крім OpenCV.
Питання 5 / 8
Фото з телефона має розмір 4032 × 3024. Колега пропонує подавати його в мережу як є, бо «більша роздільність — більше інформації». Що з цим не так?
Чому так. 4032 × 3024 × 3 = 36 578 304 числа — 34.9 МіБ на один обʼєкт, і це лише вхід. Повнозвʼязний шар навіть на тисячу нейронів потребував би десятків мільярдів ваг. Але головне не памʼять: щоб відрізнити телефон від планшета, зайві мегапікселі нічого не додають — потрібна форма предмета, а не текстура пилу на склі. Тому стандартом і стали скромні 224 × 224. Роздільність справді важлива там, де задача в дрібних деталях: читання номерів, дефекти на друкованій платі.
Питання 6 / 8
Чому виділити зелений предмет через відтінок H у HSV надійніше, ніж через три пороги по R, G і B?
Чому так. У досліді з лекції умова 45 ≤ H ≤ 75 знайшла всі 1439 пікселів індикатора на трьох різних рівнях освітлення. Три пороги по RGB на притемненому вдвічі знімку не знайшли жодного, а на висвітленому — 568 із 1439. HSV розділяє «який це колір» і «скільки на нього впало світла», і поріг ставиться лише на першу частину. Градацій у HSV не більше: це те саме зображення, перераховане іншими формулами.
Питання 7 / 8
На гістограмі знімка є високий вузький стовпчик рівно на позначці 255. Що це означає?
Чому так. Стовпчик на краю шкали означає, що багато пікселів уперлися в межу типу. Усі значення, які мали бути 260, 300 і 340, стали одним і тим самим числом 255 — різниця між ними зникла. Притемнення поверне числа в середину діапазону, але деталі не відновить: вийде рівна сіра пляма замість фактури. У пересвіченому на +90 варіанті з лекції таких пікселів 47 011 — понад пʼята частина кадру.
Питання 8 / 8
Модель навчали на знімках, збережених у JPEG з якістю 95, а в роботі до неї приходять знімки з якістю 40. Чому це може зіпсувати точність?
Чому так. JPEG розкладає зображення на плавні хвилі й викидає найдрібніші з них. Першими зникають шум матриці й тонка фактура, а навколо контрастних меж зʼявляється «дзвеніння» — світлий і темний ореол. У нашому фото найбільша похибка при якості 75 сягала 83 рівнів, і сиділа вона рівно на краю зеленої смужки. Модель бачить на вході іншу статистику, ніж та, на якій вчилась. Без втрат стискає PNG — але й економить він лише в 1.8 раза замість 39.