欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > OpenCV圖像修復cv2.inpaint()的使用

OpenCV圖像修復cv2.inpaint()的使用

熱門標簽:西青語音電銷機器人哪家好 宿州電話機器人哪家好 電梯新時達系統外呼顯示e 南昌地圖標注 旅游廁所地圖標注怎么弄 無錫智能外呼系統好用嗎 成都呼叫中心外呼系統哪家強 地圖標注與注銷 百應電話機器人總部

這篇博客將介紹如何通過OpenCV中圖像修復的技術——cv2.inpaint() 去除舊照片中的小噪音、筆劃等。并提供一個可交互式的程序,利用OpenCV的快速行進和流體力學倆種修復算法對自己的圖片進行修復。

大多數人家里都會有一些舊的老化照片,上面有一些黑點、筆劃等。如何復原呢?


在繪制工具中擦除:將簡單地用無用的白色結構替換黑色結構,效果并不理想。OpenCV中圖像修復的技術——基本思想很簡單:用相鄰像素替換這些壞標記,使其看起來像鄰居。

  • cv2.INPAINT_TELEA(Fast Marching Method 快速行進算法)
  • cv2.INPAINT_NS(Fluid Dynamics Method 流體力學算法)
  • OpenCV未實現的:Content-Aware Fill 內容感知填充算法,這是Adobe Photoshop中使用的一種高級修復技術。

cv2.inpaint() 優點:修復效果更加自然;
缺點:修復時需要提供原圖以及mask圖(與原圖一致只有被污染的像素區域有值);

1. 效果圖

官方原始圖 VS mask圖 VS 快速行進算法修復效果 VS 流體力學修復效果 如下:


接下來用可交互的例子實現自己的圖片修復;

原始圖 VS Mask圖 VS 快速行進算法修復效果圖如下:
原始圖隨意用鼠標左鍵移動繪制點、線,右鍵移動繪制矩形來隨機增加一些被污染的區域;
并根據原始圖生成mask圖,mask圖是與原始圖具有相同大小,并且只有被污染的區域是白色像素的圖。可以看到修復效果還是挺好的~

原始圖 VS Mask圖 VS 流體力學算法修復效果圖如下:
原始圖隨意用鼠標左鍵移動繪制點、線,右鍵移動繪制矩形來隨機增加一些被污染的區域;
mask圖是與原始圖具有相同大小,并且只有被污染的區域是白色像素的圖。可以看到修復效果還是挺好的~

快速行進算法與流體力學算法修復的效果圖差別不太大;

2. 原理

  • cv2.INPAINT_TELEA (Fast Marching Method 快速行進算法),對位于點附近、邊界法線附近和邊界輪廓上的像素賦予更多權重。一旦一個像素被修復,它將使用快速行進的方法移動到下一個最近的像素。
  • cv2.INPAINT_NS(Fluid Dynamics Method 流體力學算法),使用了流體力學的一些方法,基本原則是啟發式的。首先沿著邊從已知區域移動到未知區域(因為邊是連續的)。它在匹配修復區域邊界處的漸變向量的同時,繼續等高線(連接具有相同強度的點的線,就像等高線連接具有相同高程的點一樣)。
  • OpenCV未實現的:Content-Aware Fill 內容感知填充算法,這是Adobe Photoshop中使用的一種高級修復技術。

3. 源碼

# 圖像修復交互式案例——通過水流填充算法來修復被破壞的圖像區域;
# 使用倆種方法進行修復
# cv2.INPAINT_TELEA (Fast Marching Method 快速行進算法),對位于點附近、邊界法線附近和邊界輪廓上的像素賦予更多權重。一旦一個像素被修復,它將使用快速行進的方法移動到下一個最近的像素。
# cv2.INPAINT_NS 流體力學算法,使用了流體力學的一些方法,基本原則是啟發式的,首先沿著邊從已知區域移動到未知區域(因為邊是連續的)。它在匹配修復區域邊界處的漸變向量的同時,繼續等高線(連接具有相同強度的點的線,就像等高線連接具有相同高程的點一樣)。

# USAGE 
# python inpaint.py D:/deepLearning/py-demo/20210808/images/ml.jpg

# 按下鼠標左鍵,添加點、線,按下鼠標右鍵,添加矩形框,以制作被污染的需要修復圖像
# 按下空格鍵:執行修復功能
# 按下r鍵:重置待修復的mask
# 按下esc鍵,退出
import cv2
import numpy as np


class Sketcher:
    def __init__(self, windowname, dests, colors_func):
        self.prev_pt = None  # 線起始點
        self.drag_start = None  # 矩形起點
        self.drag_rect = None  # 矩形(左上角,右下角)坐標
        self.windowname = windowname
        self.dests = dests
        self.colors_func = colors_func
        self.dirty = False
        self.drawing = False
        self.mode = False
        self.show()
        cv2.setMouseCallback(self.windowname, self.on_mouse)

    def show(self):
        cv2.imshow(self.windowname, self.dests[0])

    def on_mouse(self, event, x, y, flags, param):
        pt = (x, y)
        if event == cv2.EVENT_LBUTTONDOWN:
            self.prev_pt = pt
            self.drawing = True
        elif event == cv2.EVENT_RBUTTONDOWN:
            # 第一次初始化時設定pt,往后保留上一個點作為矩形起點
            if self.drag_start == None:
                self.drag_start = pt

        if self.prev_pt and flags  cv2.EVENT_FLAG_LBUTTON:
            for dst, color in zip(self.dests, self.colors_func()):
                cv2.line(dst, self.prev_pt, pt, color, 5)
            self.dirty = True
            self.prev_pt = pt
            self.show()

        if self.drag_start and flags  cv2.EVENT_FLAG_RBUTTON:
            xo, yo = self.drag_start
            x0, y0 = np.minimum([xo, yo], [x, y])
            x1, y1 = np.maximum([xo, yo], [x, y])
            self.drag_rect = None
            if x1 - x0 > 0 and y1 - y0 > 0:
                self.drag_rect = (x0, y0, x1, y1)
                for dst, color in zip(self.dests, self.colors_func()):
                    cv2.rectangle(dst, (x0, y0), (x1, y1), color, -1)
                self.dirty = True
                self.drag_start = None
                self.drag_rect = None
                self.show()
            else:
                self.drag_start = pt

    @property
    def dragging(self):
        return self.drag_rect is not None


def main():
    import sys
    try:
        fn = sys.argv[1]
    except:
        fn = 'images/ml_.jpg'

    img = cv2.imread(fn)
    if img is None:
        print('Failed to load image file:', fn)
        sys.exit(1)

    img_mark = img.copy()
    mark = np.zeros(img.shape[:2], np.uint8)
    sketch = Sketcher('img', [img_mark, mark], lambda: ((255, 255, 255), 255))

    while True:
        ch = cv2.waitKey()
        if ch == 27:
            break
        if ch == ord(' '):
            cv2.imshow('mask', mark)
            fmmres = cv2.inpaint(img_mark, mark, 3, cv2.INPAINT_TELEA)
            nsres = cv2.inpaint(img_mark, mark, 3, cv2.INPAINT_NS)
            cv2.imshow('inpaint fmm res', fmmres)
            cv2.imshow('inpaint ns res', nsres)
        if ch == ord('r'):
            img_mark[:] = img
            mark[:] = 0
            sketch.show()

    print('Done')


if __name__ == '__main__':
    main()
    cv2.destroyAllWindows()

參考 https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_photo/py_inpainting/py_inpainting.html#inpainting

到此這篇關于OpenCV圖像修復cv2.inpaint()的使用的文章就介紹到這了,更多相關OpenCV圖像修復cv2.inpaint()內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python 用opencv實現圖像修復和圖像金字塔
  • OpenCV中圖像通道操作的深入講解
  • Python深度學習pytorch實現圖像分類數據集
  • Python實現對照片中的人臉進行顏值預測
  • Python實現老照片修復之上色小技巧

標簽:許昌 贛州 濰坊 七臺河 渭南 西安 辛集 雅安

巨人網絡通訊聲明:本文標題《OpenCV圖像修復cv2.inpaint()的使用》,本文關鍵詞  OpenCV,圖像,修復,cv2.inpaint,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《OpenCV圖像修復cv2.inpaint()的使用》相關的同類信息!
  • 本頁收集關于OpenCV圖像修復cv2.inpaint()的使用的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲精品一区在线观看| 黄色成人免费在线| 小日子的在线观看免费第8集| 自拍偷拍第9页| 久久欧美中文字幕| 美日韩一区二区| xxxxx在线观看| 欧美mv日韩mv国产网站app| 日韩二区在线观看| 国产肉体xxxx裸体784大胆| 欧美高清dvd| 午夜精品福利在线| av在线播放网址| 91麻豆精品国产91久久久久| 午夜影视日本亚洲欧洲精品| 国产成人av片| 91麻豆精品国产91久久久久| 丝袜美腿一区二区三区| 一区二区视频观看| 日韩精品一区二区三区中文精品| 蜜桃一区二区三区在线| www.久久国产| 久久久久久97三级| 国产精品1区2区3区在线观看| 精品少妇一区二区三区密爱| 亚洲国产经典视频| 成人免费毛片a| 欧美伊人久久大香线蕉综合69| 亚洲精品成人少妇| 91丨porny丨对白| 欧美大尺度电影在线| 精品午夜一区二区三区在线观看| 亚洲欧美日韩第一页| 国产精品福利一区二区三区| 99re8在线精品视频免费播放| 欧美日高清视频| 青青草国产成人99久久| 性の欲びの女javhd| 国产精品麻豆网站| 欧美图片自拍偷拍| 亚洲精品在线三区| 从欧美一区二区三区| 欧美天天综合网| 日韩高清电影一区| 91视频免费看片| 亚洲美女区一区| 国产一级伦理片| 国产亚洲1区2区3区| 97精品国产97久久久久久久久久久久| 欧美日韩国产经典色站一区二区三区| 日本成人在线电影网| 日韩一卡二卡在线观看| 亚洲女子a中天字幕| 国产又爽又黄网站| 亚洲人成网站影音先锋播放| 欧美系列日韩一区| 免费观看成人鲁鲁鲁鲁鲁视频| 香蕉久久久久久久| 一区二区三区国产| 日韩一级视频在线观看| 国产精品毛片久久久久久久| 国产精品嫩草69影院| 久久亚洲影视婷婷| 91免费国产视频网站| 欧美成人一区二区| www.欧美精品一二区| 欧美一级夜夜爽| 成人免费三级在线| 日韩精品一区二区三区中文精品| 成人黄色一级视频| 欧美一区二区黄| 成+人+亚洲+综合天堂| 欧美一个色资源| 99久久精品免费| 久久综合色婷婷| 男人的天堂免费| 国产精品每日更新在线播放网址| 熟女人妻在线视频| 亚洲视频狠狠干| 91精品久久久久久久久久久久| 亚洲一区在线视频| 欧美爱爱免费视频| 另类小说一区二区三区| 欧美在线视频全部完| 国产成人免费在线观看不卡| 欧美一区二区三区在| 99久久久无码国产精品| 久久久久久免费网| 精品国产人妻一区二区三区| 日韩毛片一二三区| 在线观看天堂av| 免费看日韩精品| 91国内精品野花午夜精品 | 欧美一级日韩免费不卡| 国产xxx精品视频大全| 欧美一区二区三区公司| 成人av中文字幕| 久久综合色天天久久综合图片| 台湾佬美性中文| 国产精品三级视频| 成年人网站免费看| 综合久久久久综合| 女女互磨互喷水高潮les呻吟| 亚洲综合区在线| 麻豆天美蜜桃91| 国内精品写真在线观看| 91精品国产一区二区三区香蕉| 91一区一区三区| 国产精品网站导航| 美女爆乳18禁www久久久久久 | 日韩视频在线观看免费视频| 香蕉av福利精品导航| 三级影片在线观看| 国产露脸91国语对白| 欧美成人官网二区| 亚洲啪av永久无码精品放毛片| 亚洲色图欧美偷拍| 伊人久久久久久久久久久久久久| 美女一区二区视频| 精品国产亚洲一区二区三区在线观看| 日本精品一二三区| 亚洲黄色免费电影| 男的操女的网站| 国产精品一卡二卡在线观看| 欧美大胆一级视频| 久久亚洲AV成人无码国产野外| 亚洲第一成年网| 欧美日韩亚州综合| 真实乱视频国产免费观看| 久久一日本道色综合| 成人做爰69片免费| 亚洲欧美在线视频| 97精品在线播放| 国产精品伦理在线| 国产wwwwxxxx| 国产一区二区在线观看免费| 精品国产电影一区二区| 欧美黑人欧美精品刺激| 蜜桃av一区二区三区| 日韩视频在线永久播放| 无码人妻aⅴ一区二区三区 | 久久综合久久99| 亚洲第一页av| 另类综合日韩欧美亚洲| 欧美成人综合网站| 日韩精品无码一区二区三区久久久 | 精品对白一区国产伦| 成人影视免费观看| 日本不卡一二三区黄网| 日韩视频在线一区二区| 亚洲啪av永久无码精品放毛片 | 日本不卡免费在线视频| 91精品啪在线观看国产60岁| 国产精品揄拍100视频| 青青草原综合久久大伊人精品| 日韩免费看的电影| 欧美熟妇精品黑人巨大一二三区| 蜜臀久久99精品久久久久久9| 欧美v日韩v国产v| 人人澡人人澡人人看| 成人精品在线视频观看| 亚洲另类中文字| 欧美亚洲国产怡红院影院| 亚洲欧美综合视频| 日韩一区精品视频| 亚洲精品在线免费观看视频| jizzjizzjizz国产| 久久97超碰色| 亚洲欧美色综合| 欧美久久久久中文字幕| 成年人在线观看av| 国产一区不卡精品| 日韩美女啊v在线免费观看| 777午夜精品视频在线播放| 精品人妻少妇嫩草av无码| 国产一区二区伦理| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | av在线网站观看| 狠狠色伊人亚洲综合成人| 欧美国产国产综合| 在线看国产日韩| 人妻丰满熟妇aⅴ无码| 国产一区啦啦啦在线观看| 18成人在线观看| 日韩美一区二区三区| 又嫩又硬又黄又爽的视频| 91麻豆国产自产在线观看| 日韩影院精彩在线| 国产欧美精品一区二区色综合| 欧美日韩一区二区三区视频| 国产av自拍一区| 99精品久久只有精品| 日本亚洲一区二区| 国产精品免费免费| 在线区一区二视频| 欧美大波大乳巨大乳| 91伊人久久大香线蕉| 毛片不卡一区二区| 亚洲品质自拍视频| 欧美精品一区二区久久久|