virtual billboard
در بسیاری از رویدادهای ورزشی تلویزیونی، تبلیغات عملا در اجرای ویدئوی زنده قرار می گیرد. به عنوان مثال. در فوتبال و بیسبال تبلیغاتی که روی تبلیغات کوچک قرار می گیرند درست در خارج از مرز میدان می تواند عملا تغییر کند. به جای نشان دادن یک آگهی به همه، تبلیغ کنندگان می توانند انتخاب کنند که تبلیغات براساس جمعیت شناسایی، مکان و غیره نمایش داده شود. در این برنامه ها، چهار پیکر تبلیغاتی در ویدیو مشخص می شوند که به عنوان مقصد مقصد خدمت می کنند. چهار گوشه آگهی را به عنوان نقاط اصلی منبع طلقی می کنند. یک هموگرافی براساس این چهار نقطه متناظر محاسبه می شود و از آن استفاده می شود تا آگهی را به فرمت ویدئویی تبدیل کند. فرض کنید می خواهیم تصویر زیر را به عنوان یک تصویر در قالب بیلبورد تبلیغاتی قرار دهیم و قبل از به اجرا در آوردن عملیات آن را تست کنیم.
و تصویر زیر در حقیقت بیلبوردی است که می خواهیم در آن تصویر بنر را قرار دهیم.
قطعه کد زیر را در فایلی ذخیره و اجرا نمایید:
#importing needed libraries
import cv2
import numpy as np
from utils import mouse_handler
from utils import get_four_points
import sys
# Read source image.
im_src = cv2.imread('opencv-learn.jpg')
size = im_src.shape
# Create a vector of source points.
pts_src = np.array(
[
[0,0],
[size[1] - 1, 0],
[size[1] - 1, size[0] -1],
[0, size[0] - 1 ]
],dtype=float
)
# Read destination image
im_dst = cv2.imread('billboard.jpg')
# Get four corners of the billboard
print('Click on four corners of a billboard and then press ENTER')
pts_dst = get_four_points(im_dst)
# Calculate Homography between source and destination points
h, status = cv2.findHomography(pts_src, pts_dst)
# Warp source image
im_temp = cv2.warpPerspective(im_src, h, (im_dst.shape[1],im_dst.shape[0]))
# Black out polygonal area in destination image.
cv2.fillConvexPoly(im_dst, pts_dst.astype(int), 0, 16)
# Add warped source image to destination image.
im_dst = im_dst + im_temp
# Display image.
cv2.imshow("Image", im_dst)
cv2.waitKey(0)
پس از به اجرا در آوردن کد بالا از شما خواسته می شود تا چهار نقطه مورد نظر برای جایگذاری عکس را مشخص نمایید که به شکل زیر خواهد بود.