国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        一文教你使用OpenCV為照片添加卡通效果

        2021-08-27 10:23
        磐創AI
        關注

        OpenCV 是一個用于實時計算機視覺應用的 Python 庫。OpenCV 是開源的,在圖像處理、機器學習和深度學習方面有著巨大的應用。OpenCV 可用于對象檢測、分類、筆跡分析等。

        OpenCV 可以與 Numpy 等庫集成,用于各種數學計算。

        計算機視覺的主要目的是理解圖像。

        OpenCV:它是關于什么的?

        使用 OpenCV,我們可以執行許多任務,例如-

        讀取和寫入圖像

        圖像處理

        捕獲和保存視頻

        特征檢測

        OpenCV 代表開源計算機視覺庫。它是使用 Python 用于計算機視覺的最流行的庫。OpenCV 可供所有人免費使用,因此 OpenCV 可用于各種項目和應用程序。

        為我們的圖像賦予卡通效果

        許多應用程序和網站都提供了為圖像賦予卡通效果的工具。年輕一代喜歡這個功能,它在社交媒體上也很受歡迎。在這些應用程序的情況下,我們只需上傳我們的圖像,然后就會返回具有所需效果的圖像。

        但是,你有沒有想過,它們是如何工作的?

        為此,需要進行多次圖像轉換。在執行此操作時需要考慮的一些重要事項是邊緣和顏色數量。

        讓我們繼續看看代碼。

        import cv2
        import numpy as np
        import matplotlib.image as img
        from matplotlib import pyplot as plt

        我們將需要 OpenCV 和 NumPy。

        現在,讓我們閱讀圖像。

        #reading the image
        img = cv2.imread("person.jpeg")

        我們已經將圖像作為輸入。

        讓我們看看圖像數據類型是什么。

        #image type
        type(img)

        輸出:  numpy.ndarray

        因此,圖像基本上是一個多維的 NumPy 數組。

        邊緣遮罩

        在卡通效果中,通常非常強調圖像邊緣的厚度。

        我們可以使用**cv2.adaptiveThreshold()**函數檢測邊緣。

        在我們繼續處理邊緣之前,我們需要將圖像轉換為灰度。然后,使用 cv2.medianBlur函數來降低灰度圖像的噪聲。

        讓我們繼續看看代碼:

        #Create Edge Mask
        def edge_mask(img, line_size, blur_value):
         gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
         gray_blur = cv2.medianBlur(gray, blur_value)
         edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, line_size, blur_value)
         return edges

        line_size = 7
        blur_value = 7

        定義了線條大小和模糊值。為了強調較粗的邊緣,采用較大的線條尺寸。

        讓我們得到邊緣。

        edges = edge_mask(img, line_size, blur_value)

        現在,我們保存圖像。

        filename = 'edges.jpg'
        # Using cv2.imwrite() method
        # Saving the image
        cv2.imwrite(filename, edges)

        輸出:

        我們可以看到檢測到了邊緣。

        減少顏色數量

        照片和草圖/卡通之間的主要區別在于不同顏色的數量。與高清照片相比,卡通素描的顏色要少得多。

        因此,使用了一種名為顏色量化的方法。這將減少照片中的顏色數量。

        K均值聚類算法用于執行該過程!発”值根據我們需要的顏色數量進行調整。

        #colour quantization
        #k value determines the number of colours in the image
        total_color = 8
        k=total_color

        在這種情況下,k 的值取為 8。

        # Transform the image
        data = np.float32(img).reshape((-1, 3))

        接下來,圖像被轉換。

        # Determine criteria
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 0.001)

        現在,我們實施 K 均值。

        # Implementing K-Means
        ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
        center = np.uint8(center)
        result = center[label.flatten()]
        result = result.reshape(img.shape)

        讓我們保存圖像。

        filename = 'colour.jpg'
        # Using cv2.imwrite() method
        # Saving the image
        cv2.imwrite(filename, result)

        輸出:

        好的,現在我們看到了一些效果。

        顏色量化完成后,我們現在可以減少圖像中的噪聲。雙邊濾波器可用于此任務。

        生成的圖像會稍微模糊,圖像清晰度會降低。

        blurred = cv2.bilateralFilter(result, d=10, sigmaColor=250,sigmaSpace=250)

        讓我們保存圖像,看看它的外觀。

        #saving the image
        filename = 'blurred.jpg'
        # Using cv2.imwrite() method
        # Saving the image
        cv2.imwrite(filename, blurred)

        輸出:

        完成后,現在我們做最后的卡通效果。

        最終圖像

        #blurred and edges
        cartoon = cv2.bitwise_and(blurred, blurred, mask=edges)

        現在,我們保存圖像。

        filename = 'cartoon.jpg'
        # Using cv2.imwrite() method
        # Saving the image
        cv2.imwrite(filename, cartoon)

        讓我們看看圖像是什么樣子的。

        輸出做得很好。圖像被賦予了有趣的效果。

        OpenCV 可以進行有趣的圖像轉換。

        現在讓我們嘗試其他東西,這一次,我們也將使用輪廓。

        應用帶有輪廓的卡通效果

        讓我們首先正確定義函數。

        首先是顏色量化函數。

        #Colour Quantization
        def ColourQuantization(image, K=9):
           Z = image.reshape((-1, 3))
           Z = np.float32(Z)
           criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)
           compactness, label, center = cv2.kmeans(Z, K, None, criteria, 1, cv2.KMEANS_RANDOM_CENTERS)
           center = np.uint8(center)
           res = center[label.flatten()]
           res2 = res.reshape((image.shape))
           return res2

        這里,對于 K-Means,K 的值取為 9。

        現在讓我們定義輪廓的函數。

        #to get countours
        def Countours(image):
           contoured_image = image
           gray = cv2.cvtColor(contoured_image, cv2.COLOR_BGR2GRAY)
           edged = cv2.Canny(gray, 200, 200)
           contours, hierarchy = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2:]
           cv2.drawContours(contoured_image, contours, contourIdx=-1, color=6, thickness=1)
           return contoured_image

        在這個函數中,圖像首先被轉換為灰度,然后檢測邊緣。最后,還制作了輪廓。

        現在,讓我們使用該函數。

        使用了下圖。

        image = cv2.imread("person1.jpeg")
        coloured = ColourQuantization(image)
        contoured = Countours(coloured)
        final_image = contoured

        在此之后,圖像被保存。

        filename = 'cartoon_final.jpg'
        # Using cv2.imwrite() method
        # Saving the image
        cv2.imwrite(filename, final_image)

        輸出:

        在這種情況下,輸出也很有趣。

        通過改變各種參數,可以修改卡通效果。

        說到用途,目前這類處理方法主要用于社交媒體和藝術目的。人們可以對他們的圖像進行有趣的編輯,并將它們發布到社交媒體上。

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 南康市| 五月婷视频| 伊人性网| 91视频免费观看| 磐石市| 色77777| 76少妇精品导航久久久久| 国产熟女播放| 日韩资源站| 无码?人妻?在线| 99zyz| A片入口| 亚洲深夜| 国精产品一区一区二区三区mba| 欧美午夜福利| 久久国模| 小鸡入水蜜桃免费观看电视剧| 亚洲综合乱| 国产黄色在线| 看亚洲一级黄色片啪啪啪| 广西| 福州市| 丝袜国产在线| 麻栗坡县| 青青久草| 蜜桃av网站| 黑人与亚洲av| 乡宁县| 亚洲无码mv| 亚州成人AV| 午夜剧场黄色| 67194欧洲女人| 仙游县| 91白浆| av色综合| 熟女嫩穴?播放| 婷婷五月激情综合| 浦北县| 51av视频| 久久久91精品人妻无码夜色_国产v| 日韩1024|