در قسمت هشتم از مجموعه آموزشی پردازش تصویر در پایتون، کار با عملگرهای تصویر را به پایان رساندیم و توانستیم بک گراند یک تصویر را حذف کنیم و آن را بر روی یک تصویر دیگر قرار بدهیم. در این قسمت قصد داریم با عملگر آستانه کار کنیم. در ادامه بیشتر با این موضوع آشنا خواهیم شد.
ما با استفاده از عملگر آستانه میتوانیم آستانهای را تعیین کنیم تا اگر پارامتر مدنظر ما از آن آستانه گذر کرد، آن را تشخیص بدهیم و تغییراتی روی تصویر ایجاد کنیم.
ما قصد داریم تا با استفاده از عملگر آستانه قسمتی از تصویر که متن وجود دارد را تشخیص بدهیم. البته فقط قصد تشخیص متن را داریم نه خواندن آن متن.
پیدا کردن آستانه شاید کمی وقتگیر و حوصله بر باشد، اما در نهایت میتوان با سعی و خطا آن را پیدا کرد. روش بهتر این است که تصویر را به سیاه و سفید تبدیل کنید تا پیدا کردن آستانه بسیار راحتتر باشد. ما نیز همین کار را کردهایم و ابتدا تصویر را به سیاه و سفید تبدیل کردهایم و در نهایت آستانه آن را پیدا کردیم.
عملگر آستانه هم میتواند ثابت باشد و هم متغیر، وقتی ثابت باشد تمامی تصویر با یک پارامتر ثابت سنجیده میشود و ممکن است در نهایت نتیجه کار خوب نشود.
اما اگر آستانه ثابت نباشد، قسمتهای مختلف تصویر با پارامترهای متفاوتی سنجیده میشود و نتیجهی کار میتواند بهتر باشد.
با استفاده از دستور adaptiveThreshold از کتابخانه opencv میتوانیم آستانه متغیر را اعمال کنیم. در این دستور متدهای متفاوتی وجود دارد که یکی از این متدها متد گوسی میباشد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import cv2 import numpy as numpy img = cv2.imread('book.jpg') gray = cv2.cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, threshold = cv2.threshold(gray, 10, 255, cv2.THRESH_BINARY) th = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1) cv2.imshow('page', img) cv2.imshow('paget', threshold) cv2.imshow('threshAdaptive', th) cv2.waitKey(0) cv2.destroyAllWindows |
پس از اجرای برنامهی بالا به خروجیهای زیر دست خواهیم یافت: