Tasvirlarning geometrik o'zgarishi
Maqsadlar
• Turli geometrik o'zgarishlarni rasmlarga tarjima, aylantirish, afinaviy o'zgartirish va hokazolarni qo'llashni o'rganish.
• Siz ushbu funktsiyalarni ko'rasiz: cv2.getPerspectiveTransform
O'zgarishlar
OpenCV ikkita transformatsion funktsiyani taqdim etadi, cv2.warpAffine va cv2.warpPerspective, ular yordamida siz ega bo'lishingiz mumkin.
har qanday o'zgarishlar. cv2.warpAffine 2x3 aylantirish matritsasini oladi, cv2.warpPerspective esa kirish uchun 3x3 aylantirish matritsasini oladi.
Miqyos
Masshtablash bu shunchaki tasvir hajmini o'zgartirish. Buning uchun OpenCV cv2.resize () funktsiyasi mavjud. Hajmi rasm qo'lda ko'rsatilishi mumkin yoki siz masshtablash omilini belgilashingiz mumkin. Turli xil interpolyatsiya usullari ishlatilgan. Interpolatsiyalashning afzal usullari - cv2.INTER_AREA kichrayishi va cv2.INTER_CUBIC (sekin) & kattalashtirish uchun cv2.INTER_LINEAR. Odatiy bo'lib, interpolatsiya usuli cv2.INTER_LINEAR barcha o'lchamlarini o'zgartirish uchun ishlatiladi
maqsadlar. Quyidagi usullardan ikkitasini kiritish mumkin:
Harakatlantirish.
Harakatlantirish - bu ob'ekt joylashuvining o'zgarishi. Agar siz (x, y) yo'nalishda siljishni bilsangiz, shunday bo'lsin, yaratishingiz mumkin
o'zgartirish M matritsasi quyidagicha:
Siz uni np.float32 turidagi Numpy massiviga kiritib, uni cv2.warpAffine () funktsiyasiga o'tkazishingiz mumkin. (100,50) o'zgarishi uchun quyidagi misolga qarang:
Ogohlantirish: cv2.warpAffine () funktsiyasining uchinchi argumenti (kenglik, balandlik) shaklida bo'lishi kerak bo'lgan chiqish hajmining o'lchamidir. Esda tuting kenglik = ustunlar soni va balandlik = qatorlar soni.
Quyidagi natijani ko'ring:
Burilish
Tasvirni burchak uchun aylantirishga shaklning matritsasi orqali erishiladi
Ammo OpenCV sizga aylantirilishi mumkin bo'lgan aylanish markazi bilan kengaytirilgan aylanishni ta'minlaydi, shunda siz xohlagan joyda aylanishingiz mumkin. Modifikatsiyalangan transformatsiya matritsasi quyidagicha berilgan
Ushbu o'zgartirish matritsasini topish uchun OpenCV cv2.getRotationMatrix2D funktsiyasini taqdim etadi. Tasvirni hech qanday masshtabsiz markazga nisbatan 90 daraja aylantiruvchi misolni tekshiring.
Natija:
Affine transformatsiyasi
Afinani o'zgartirishda, dastlabki rasmdagi barcha parallel chiziqlar chiqish rasmiga parallel ravishda qoladi. Transformatsion matritsani topish uchun, biz kirish rasmidan uchta nuqta va chiqish rasmidagi mos keladigan nuqtalar kerak. Keyin cv2.getAffineTransform 2x3 matritsani yaratadi, uni cv2.warpAffine-ga o'tkazish kerak.
Quyidagi misolga (yashil rang bilan belgilangan) qarang:
Natija:
Istiqbolli o'zgarish
Istiqbolli konvertatsiya qilish uchun sizga 3x3 aylantirish matritsasi kerak. To'g'ri chiziqlar transformatsiyadan keyin ham to'g'ri qoladi. Ushbu transformatsion matritsani topish uchun kirish rasmiga 4 nuqta va chiqish rasmidagi mos keladigan nuqtalar kerak. Ushbu 4 nuqta orasida ulardan 3 tasi bir-biriga to'g'ri kelmasligi kerak. Keyin transformatsiya matritsasi bo'lishi mumkin
cv2.getPerspectiveTransform funktsiyasi bilan topilgan. Keyin bu 3x3 aylantirish matritsasi bilan cv2.warpPerspective-ni qo'llang.
Quyidagi kodni ko'ring:
Natija:
Do'stlaringiz bilan baham: |