<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          學(xué)習(xí) Python 你必須了解的 lenna 小姐姐

          共 1316字,需瀏覽 3分鐘

           ·

          2020-09-12 16:13

          lenna 小姐姐作為圖像領(lǐng)域中的 hello world,20 世紀(jì)的跨界達(dá)人,幾代人的戰(zhàn)斗對象。

          對于入門 Python 的你,如果了解了 lenna 小姐姐,那可相當(dāng)于半根腳趾頭踏入了圖像處理的大門,所以今天從下面幾個方面給大家介紹一下 lenna 小姐姐

          • lenna是誰?

          • 為什么選這張圖?

          • 都對lenna做了什么?

          • lenna近照

          lenna是誰?

          萊娜·瑟德貝里(瑞典文:Lena Soderberg),1951年3月31日出生于瑞典,在1972年11月期的《花花公子》雜志中,她化名為萊娜·舍布洛姆,成為了當(dāng)期的玩伴女郎。

          她的照片(即萊娜圖)后來被數(shù)字圖像處理領(lǐng)域所廣泛使用。

          為什么選這張圖?

          主要有三個原因

          • 這張圖適度的混合了細(xì)節(jié)、平滑區(qū)域、陰影和紋理,從而能很好的測試各種圖像處理算法
          • 這張圖的Lena是個美女,對于圖像處理界的研究者(大部分都是男性)來說,美女圖可以有效的吸引他們來做研究
          • 該照片的全圖實在太吸引眼球,廣為流傳的圖僅為全圖的1/3,(全圖這里實在放不了,一放就封號)

          都對lenna做了什么?

          通過cv2包,科研人員對這張圖無所不用其極,繪圖顯示、切分、濾鏡、校正、旋轉(zhuǎn)、變換,行哥這里將源碼和結(jié)果一一附上

          1.灰度顯示

          img_gray?=?cv2.imread('lenna.jpg',0)
          cv2.imshow('lenna',?img_gray)
          #?判斷鍵盤按鍵
          key?=?cv2.waitKey()
          if?key?==?27:
          ????cv2.destroyAllWindows()

          2.截圖顯示

          img_crop?=?img[0:100,?0:200]
          cv2.imshow('lena_crop',img_crop)
          #?判斷鍵盤按鍵???如果是27?esc?則退出游戲
          key?=?cv2.waitKey()
          if?key?==?27:
          ????cv2.destroyAllWindows()

          3.RGB轉(zhuǎn)換

          B,G,R?=?cv2.split(img)
          cv2.imshow('B',B)
          cv2.imshow('G',R)
          cv2.imshow('R',R)
          key?=?cv2.waitKey()
          if?key?==?27:
          ????cv2.destroyAllWindows()

          4.加入濾鏡

          def?random_light_color(img):
          ????#?brightness
          ????B,?G,?R?=?cv2.split(img)

          ????b_rand?=?random.randint(-50,?50)
          ????if?b_rand?==?0:
          ????????pass
          ????elif?b_rand?>?0:
          ????????lim?=?255?-?b_rand
          ????????B[B?>?lim]?=?255
          ????????B[B?<=?lim]?=?(b_rand?+?B[B?<=?lim]).astype(img.dtype)
          ????elif?b_rand?0:
          ????????lim?=?0?-?b_rand
          ????????B[B?0
          ????????B[B?>=?lim]?=?(b_rand?+?B[B?>=?lim]).astype(img.dtype)

          ????g_rand?=?random.randint(-50,?50)
          ????if?g_rand?==?0:
          ????????pass
          ????elif?g_rand?>?0:
          ????????lim?=?255?-?g_rand
          ????????G[G?>?lim]?=?255
          ????????G[G?<=?lim]?=?(g_rand?+?G[G?<=?lim]).astype(img.dtype)
          ????elif?g_rand?0:
          ????????lim?=?0?-?g_rand
          ????????G[G?0
          ????????G[G?>=?lim]?=?(g_rand?+?G[G?>=?lim]).astype(img.dtype)

          ????r_rand?=?random.randint(-50,?50)
          ????if?r_rand?==?0:
          ????????pass
          ????elif?r_rand?>?0:
          ????????lim?=?255?-?r_rand
          ????????R[R?>?lim]?=?255
          ????????R[R?<=?lim]?=?(r_rand?+?R[R?<=?lim]).astype(img.dtype)
          ????elif?r_rand?0:
          ????????lim?=?0?-?r_rand
          ????????R[R?0
          ????????R[R?>=?lim]?=?(r_rand?+?R[R?>=?lim]).astype(img.dtype)

          ????img_merge?=?cv2.merge((B,?G,?R))
          ????#img?=?cv2.cvtColor(final_hsv,?cv2.COLOR_HSV2BGR)
          ????return?img_merge

          img_random_color?=?random_light_color(img)
          cv2.imshow('img_random_color',?img_random_color)
          key?=?cv2.waitKey()
          if?key?==?27:
          ????cv2.destroyAllWindows()

          5.gamma校正


          def?adjust_gamma(image,?gamma=1.0):
          ????invGamma?=?1.0?/?gamma
          ????table?=?[]
          ????for?i?in?range(256):
          ????????table.append(((i?/?255.0)?**?invGamma)?*?255)
          ????table?=?np.array(table).astype("uint8")
          ????return?cv2.LUT(img_dark,?table)

          img_dark?=?cv2.imread('material/lenna.jpg')
          cv2.imshow('img_dark',?img_dark)
          img_brighter?=?adjust_gamma(img_dark,?2)
          cv2.imshow('img_dark',?img_dark)
          cv2.imshow('img_brighter',?img_brighter)
          key?=?cv2.waitKey()
          if?key?==?27:
          ????cv2.destroyAllWindows()

          6.圖像旋轉(zhuǎn)

          M?=?cv2.getRotationMatrix2D((img.shape[1]?/?2,?img.shape[0]?/?2),?30,?1)??#?center,?angle,?scale
          img_rotate?=?cv2.warpAffine(img,?M,?(img.shape[1],?img.shape[0]))
          cv2.imshow('rotated?lenna',?img_rotate)
          key?=?cv2.waitKey(0)
          if?key?==?27:
          ????cv2.destroyAllWindows()

          7.仿射變換

          rows,?cols,?ch?=?img.shape
          pts1?=?np.float32([[0,?0],?[cols?-?1,?0],?[0,?rows?-?1]])
          pts2?=?np.float32([[cols?*?0.2,?rows?*?0.1],?[cols?*?0.9,?rows?*?0.2],?[cols?*?0.1,?rows?*?0.9]])

          M?=?cv2.getAffineTransform(pts1,?pts2)
          dst?=?cv2.warpAffine(img,?M,?(cols,?rows))

          cv2.imshow('affine?lenna',?dst)
          key?=?cv2.waitKey(0)
          if?key?==?27:
          ????cv2.destroyAllWindows()

          8.透視變化

          def?random_warp(img,?row,?col):
          ????height,?width,?channels?=?img.shape

          ????#?warp:
          ????random_margin?=?60
          ????x1?=?random.randint(-random_margin,?random_margin)
          ????y1?=?random.randint(-random_margin,?random_margin)
          ????x2?=?random.randint(width?-?random_margin?-?1,?width?-?1)
          ????y2?=?random.randint(-random_margin,?random_margin)
          ????x3?=?random.randint(width?-?random_margin?-?1,?width?-?1)
          ????y3?=?random.randint(height?-?random_margin?-?1,?height?-?1)
          ????x4?=?random.randint(-random_margin,?random_margin)
          ????y4?=?random.randint(height?-?random_margin?-?1,?height?-?1)

          ????dx1?=?random.randint(-random_margin,?random_margin)
          ????dy1?=?random.randint(-random_margin,?random_margin)
          ????dx2?=?random.randint(width?-?random_margin?-?1,?width?-?1)
          ????dy2?=?random.randint(-random_margin,?random_margin)
          ????dx3?=?random.randint(width?-?random_margin?-?1,?width?-?1)
          ????dy3?=?random.randint(height?-?random_margin?-?1,?height?-?1)
          ????dx4?=?random.randint(-random_margin,?random_margin)
          ????dy4?=?random.randint(height?-?random_margin?-?1,?height?-?1)

          ????pts1?=?np.float32([[x1,?y1],?[x2,?y2],?[x3,?y3],?[x4,?y4]])
          ????pts2?=?np.float32([[dx1,?dy1],?[dx2,?dy2],?[dx3,?dy3],?[dx4,?dy4]])
          ????M_warp?=?cv2.getPerspectiveTransform(pts1,?pts2)
          ????img_warp?=?cv2.warpPerspective(img,?M_warp,?(width,?height))
          ????return?M_warp,?img_warp


          M_warp,?img_warp?=?random_warp(img,?img.shape[0],?img.shape[1])
          cv2.imshow('lenna_warp',?img_warp)
          key?=?cv2.waitKey(0)
          if?key?==?27:
          ????cv2.destroyAllWindows()

          lenna近照

          lenna 近照

          再厲害的圖片處理,也抵擋不過時間的威力,將近七旬的“小姐姐”以另一種方式為圖片處理領(lǐng)域作出了自己的貢獻(xiàn)


          推薦閱讀


          帶你用 Python 實現(xiàn)自動化群控(入門篇)

          這些自動化場景,批處理完全可以取代 Python

          我用幾行 Python 自動化腳本完美解決掉了小姐姐的微信焦慮感



          瀏覽 125
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产美女被日 | 中文AV网 | 日韩一区观看 | 免费在线a| 九色91TM视频 |