Създаването на красива скица изисква много време и усилия. За щастие, програмирането се разви, така че вече можете лесно да трансформирате изображения и да създавате красиви дизайни. Една впечатляваща техника, която можете да приложите, е да конвертирате изображение в цифрова скица.
Въпреки че една механична скица няма да изглежда точно като собствената ви рисунка с молив, резултатът все пак си струва да експериментирате. Научете как да програмирате такова приложение с помощта на модула OpenCV на супер приятелския език Python.
Модулът OpenCV
OpenCV е разработена и поддържана от Intel библиотека с отворен код за методи за компютърно зрение, използвани за обработка на изображения и компютърно зрение. Това улеснява потребителите да създават оптимизирани приложения, да взаимодействат с изображения и видеоклипове в реално време и да избират идеалния алгоритъм за техните нужди.
Някои от популярните приложения на OpenCV включва разпознаване на лица, автоматично проследяване на лица в кинематографията, филтри за социални медии, разпознаване на регистрационни номера на автомобилии видеонаблюдение. За да използвате модула OpenCV в Python, отворете вашия терминал и въведете следната команда:
pip инсталирайте opencv-python
Как да конвертирате всяко изображение в скица с помощта на Python
За да конвертирате любимото си изображение в цифрова скица, започнете, като го поставите в същата папка като нова програма на Python, за лесно препращане. След това започнете да изграждате вашата програма, като използвате следните стъпки.
Този примерен код е наличен в a GitHub хранилище и е безплатен за използване под лиценза на MIT.
Първата стъпка е да импортирате модула OpenCV във вашата среда. След като OpenCV е наличен, можете да използвате неговата функционалност за извършване на различни задачи. Предайте пътя на вашия файл с изображение в imread() функция, за да го заредите. Съхранявайте вашето изображение в променлива, наречена изображение1 тук - за бъдещи справки.
Съхранявайте заглавието на прозореца в променлива с име име_на_прозорец. Това ще бъде полезно, когато изберете да покажете изображението с помощта на imshow() функция. Тази функция изисква два параметъра: заглавие и изображение, което искате да покажете.
импортиране cv2
image1 = cv2.imread('image.jpg')
име_на_прозорец = „Действително изображение“
cv2.imshow (име_на_прозорец, изображение1)
След като имате желаното изображение, трябва да извършите пет операции, за да го трансформирате в скица. Първо преобразувайте цветното изображение в нива на сивото. Можете да направите това с cvtColor() функция. Тази функция приема изображението, чиито цветове искате да промените, и код за преобразуване, като напр COLOR_BGR2GRAY.
grey_img = cv2.cvtColor (image1, cv2.COLOR_BGR2GRAY)
След като имате изображение в сива скала, обърнете цветовете му. На този етап трябва да разберете как компютърът формира изображение. Едно изображение се състои от много малки пиксели с различен интензитет. В цветно изображение всеки пиксел съдържа червени, зелени и сини компоненти, всеки с интензитет, който варира от 0 до 255.
В изображение в скала на сивото има само нюанси на сивото, така че интензитетът на един пиксел варира между 0 и 1. За да обърнете интензитетите на пикселите на това изображение, предайте изображението в сивата скала на bitwise_not() функция.
Както подсказва името, тази функция обръща стойността на всеки пиксел към неговия допълнителен еквивалент. Всички пиксели, които са по-големи от 0, са зададени на 0, а всички пиксели, които са равни на 0, са зададени на 255.
инвертиране = cv2.bitwise_not (grey_img)
След като обърнете интензитетите на пикселите, можете да изгладите изображението с помощта на Gaussian Blur. Процесът на Gaussian Blur използва Gaussian филтър. Гаусовият филтър е нискочестотен филтър, който позволява преминаването само на ниски честоти, като премахва високочестотния компонент на сигнал или изображение.
OpenCV GaussianBlur() функцията приема четири параметъра. Това са матричен обект, който действа като изходно изображение, ksize (размер на ядрото) и sigmaX (стандартно отклонение на ядрото на Гаус).
Да предположим, че имате физическа снимка в ръката си. Ако искате да го размажете, можете да поставите парчета восък или пергаментова хартия върху него. Можете да си представите ядрото като този прозрачен лист хартия. Цифрово това се случва малко по-различно. За да замъглите, изострите и приложите други ефекти върху цифрово изображение, вие умножавате матрица с интензитета на пикселите на изображението.
Ksize винаги е положително нечетно число. С увеличаването на размера на ядрото размазването се увеличава. За да разберете sigmaX, приемете, че нанасяте восък върху хартия. Докато нанасяте восък, хартията става равномерно полупрозрачна. По същия начин трябва да поддържате стойностите на ядрото близо до определена точка (средната). Стойността sigmaX определя разликата между средните и другите стойности на пикселите в изображението.
Предавайте обърнатото изображение, размера на ядрото като (21, 21) и 0 стандартно отклонение към функцията Gaussian Blur:
размазване = cv2.GaussianBlur (инвертиране, (21, 21), 0)
Предайте отново замъгленото изображение на функцията bitwise_not(), за да го обърнете:
invertedblur = cv2.bitwise_not (размазване)
Накрая използвайте разделям() функция и за извършване на разделяне по елементи на масива от изображения в сивата скала и масива от обърнати размазани изображения със скала 256.
скица = cv2.divide (grey_img, invertedblur, scale=256.0)
По същество функцията изпълнява следната операция:
дефразделям(grey_img, b, invertedblur=256.0):
връщане (grey_img * мащаб) / обърнато замъгляване
Съхранявайте резултата в променлива с име sketch. За да запазите крайното изображение, подайте име за вашия изходен файл и изображението на скицата към imwrite() функция. За да го проверите, можете да използвате функцията imread(), за да заредите запазеното изображение на скицата, да зададете заглавие на прозореца и да го покажете с помощта на функцията imshow().
Използвай чакащ ключ() функция чрез предаване на 0 за показване на прозореца на оригиналното изображение и прозореца на генерираната скица, докато не натиснете произволен клавиш.
cv2.imwrite("sketch.jpeg", скица)
изображение = cv2.imread("sketch.jpeg")
име_на_прозорец =„Изображение на скица“
cv2.imshow (име_на_прозорец, изображение)
cv2.waitKey(0)
Съберете целия код и програмата ви е готова.
Примерен резултат от конвертиране на изображение в скица с помощта на тази програма на Python
Можете да изберете красиво пейзажно изображение и да го пуснете през програмата, за да генерирате тази зашеметяваща цифрова скица.
На портретно изображение програмата генерира следната цифрова скица.
Можете да експериментирате с параметрите на функцията според вашите предпочитания, за да генерирате желаната от вас цифрова скица.
Обработка на изображения и компютърно зрение
Обработката на изображения и компютърното зрение са две тясно свързани области на технологиите. И двете включват промяна на цифрови изображения, за да се получат желаните резултати. Обработката на изображения се фокусира върху подобряването на картината, докато компютърното зрение се стреми да намери модели и обекти в изображението, за да го разбере.
Scikit-image е друга библиотека на Python, която предоставя голямо разнообразие от функции за обработка на изображения. Има няколко предварително компилирани модула, филтри, слоеве, трансформации и др. Ако търсите модул, който да използвате за модели за дълбоко обучение като CNN и RNN, може да искате да проучите Torchvision.