<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>036 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】 on 嗡嗡的隨手筆記</title>
        <link>https://wongwongnotes.com/categories/036---12th-%E9%90%B5%E4%BA%BA%E8%B3%BD---%E9%8C%A2%E4%B8%8D%E5%A4%A0%E8%B2%B7ps%E7%9A%84%E6%88%91%E5%8F%AA%E5%A5%BD%E7%94%A8opencv%E4%BE%86%E4%BF%AE%E5%9C%96%E4%BA%86/</link>
        <description>Recent content in 036 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】 on 嗡嗡的隨手筆記</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <copyright>嗡嗡</copyright>
        <lastBuildDate>Mon, 12 Oct 2020 02:07:08 +0800</lastBuildDate><atom:link href="https://wongwongnotes.com/categories/036---12th-%E9%90%B5%E4%BA%BA%E8%B3%BD---%E9%8C%A2%E4%B8%8D%E5%A4%A0%E8%B2%B7ps%E7%9A%84%E6%88%91%E5%8F%AA%E5%A5%BD%E7%94%A8opencv%E4%BE%86%E4%BF%AE%E5%9C%96%E4%BA%86/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>【OpenCV】30 - Final Project v3 — 於是沒錢買 ps 的我，開發了自己的 photoshop</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-my-photoshop-v3/</link>
        <pubDate>Mon, 12 Oct 2020 02:07:08 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-my-photoshop-v3/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424JkPgV13XD4.png" alt="Featured image of post 【OpenCV】30 - Final Project v3 — 於是沒錢買 ps 的我，開發了自己的 photoshop" /&gt;&lt;h2 id=&#34;my-photoshop-ver30&#34;&gt;My photoshop ver3.0&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424JkPgV13XD4.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424JkPgV13XD4.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424JkPgV13XD4_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424JkPgV13XD4_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】30 - Final Project v3 — 於是沒錢買 ps 的我，開發了自己的 photoshop&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;功能列表&#34;&gt;功能列表&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ------  My photoshop Release notes ------ #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ver3.0 (2020.10.12)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;優化整體程式穩定度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增油漆工具&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;位於&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;My color panel&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;視窗&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;可自選色&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;3.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增新視窗&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;My control panel&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;為所有調整的主控版&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;之前的調整功能也移至這裡&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;4.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;同上&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;同時移除主畫面&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;My photoshop&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;的所有調整功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;5.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增可調整RGB分量功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;6.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增可調整色溫功能&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;冷色系&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;暖色系&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;7.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增銳化功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;8.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增4種不同模糊功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;9.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增22種不同&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;colormap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;10.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增視窗自動調整大小的功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;11.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增自動將視窗移動至固定位置的功能&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;以後不用自己移動視窗了&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ver2.0 (2020.10.11)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增視窗&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;My histogram&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;可以隨時查看現在圖片的&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RGB直方圖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增視窗&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;My color panel&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;可以自己選顏色&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;自己畫點&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ver1.0 (2020.10.10)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增儲存檔案功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;離開應用程式的穩定優化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;3.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增關閉程式的文字提示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;4.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增調整光線&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;對比度功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;5.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增調整明度&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;飽和度功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;6.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增旋轉圖片功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;7.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增可增加圖片噪點的功能&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;相當於增加圖片顆粒感&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day30_My_photoshop_v3.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day30_My_photoshop_v3.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;所以沒錢買 photoshop 的我，最後自己做了一個 photoshop 嗎&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;這系列會把之前所學到的東西全部整理到一支程式中，&lt;br&gt;
當然我知道如果「用類似 QT 可以整出更好的視覺化界面」，&lt;br&gt;
但我們的重點還是放回「只靠 OpenCV 能做的極限」能到哪邊哈哈哈&lt;/p&gt;
&lt;h2 id=&#34;新增功能一覽&#34;&gt;新增功能一覽&lt;/h2&gt;
&lt;h3 id=&#34;1-優化整體程式穩定度&#34;&gt;1. 優化整體程式穩定度&lt;/h3&gt;
&lt;p&gt;這次的改版主要做的事情是將 「無限while迴圈」 的部分，&lt;br&gt;
加了個 &lt;code&gt;time.sleep(0.001)&lt;/code&gt;，&lt;br&gt;
這樣做可以大幅降低 memory 的使用率，&lt;br&gt;
而且 &lt;code&gt;time.sleep(0.001)&lt;/code&gt; 對於人是幾乎不會有感覺的，&lt;br&gt;
加了這行程式碼能讓我們的程式更好的使用電腦資源。&lt;/p&gt;
&lt;h3 id=&#34;2-新增油漆工具-位於-my-color-panel-視窗可自選色&#34;&gt;2. 新增油漆工具 (位於 &amp;ldquo;My color panel&amp;rdquo; 視窗，可自選色)&lt;/h3&gt;
&lt;p&gt;這個就是 「漫水填充法 cv2.floodFill」 的應用，&lt;br&gt;
可參考： &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248266&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 21 - 花式修圖3，OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-新增新視窗-my-control-panel為所有調整的主控版-之前的調整功能也移至這裡&#34;&gt;3. 新增新視窗 &amp;ldquo;My control panel&amp;rdquo;，為所有調整的主控版 (之前的調整功能也移至這裡)&lt;/h3&gt;
&lt;h3 id=&#34;4-同上同時移除主畫面-my-photoshop-的所有調整功能&#34;&gt;4. 同上，同時移除主畫面 &amp;ldquo;My photoshop&amp;rdquo; 的所有調整功能&lt;/h3&gt;
&lt;p&gt;因為我們接下來會新增一大堆功能，&lt;br&gt;
如果像之前的畫面直接加在圖片下方空間會不夠用。&lt;br&gt;
因此我們新增一個主控台視窗 &amp;ldquo;My control panel&amp;rdquo;，&lt;br&gt;
我們將之後所有要加的功能加進這裡面。&lt;/p&gt;
&lt;h3 id=&#34;5-新增可調整rgb分量功能&#34;&gt;5. 新增可調整RGB分量功能&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10237471&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 6 - 日系濾鏡3，運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)modify color temperature, white balance&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;6-新增可調整色溫功能-冷色系暖色系&#34;&gt;6. 新增可調整色溫功能 (冷色系、暖色系)&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10237471&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 6 - 日系濾鏡3，運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)modify color temperature, white balance&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;7-新增銳化功能&#34;&gt;7. 新增銳化功能&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10250742&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 26 - 進階修圖6，銳化圖片，將模糊的圖片變得更清晰吧！ sharpen images&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;8-新增4種不同模糊功能&#34;&gt;8. 新增4種不同模糊功能&lt;/h3&gt;
&lt;h3 id=&#34;9-新增22種不同-colormap&#34;&gt;9. 新增22種不同 colormap&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10251240&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 27 - 花式修圖4，顏色映射 - OpenCV 內建的自動配色?! auto recolor images, cv2.applyColorMap&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這邊皆可以從之前我的文章找到相關內容哦!&lt;/p&gt;
&lt;h3 id=&#34;10-新增視窗自動調整大小的功能&#34;&gt;10. 新增視窗自動調整大小的功能&lt;/h3&gt;
&lt;p&gt;因為有時視窗大小會太大，而實際上我們並不需要太大的視窗，&lt;br&gt;
(例如：我們只有一條滑動條，但滑動條被拉的太長，實際上沒必要)&lt;br&gt;
因此我固定了視窗的大小。&lt;/p&gt;
&lt;h3 id=&#34;11-新增自動將視窗移動至固定位置的功能以後不用自己移動視窗了&#34;&gt;11. 新增自動將視窗移動至固定位置的功能，以後不用自己移動視窗了!&lt;/h3&gt;
&lt;p&gt;這算是對自己執行程式後的視窗分布比較友善一些，&lt;br&gt;
自動把所有視窗移動到對應位置，&lt;br&gt;
就不需要手動再移動了!&lt;/p&gt;
&lt;p&gt;而且，我們還模擬了 photoshop 視窗控制的分佈位置，&lt;br&gt;
現在看起來有更像 photoshop 的感覺了! &lt;del&gt;(吧)&lt;/del&gt;&lt;/p&gt;
&lt;h2 id=&#34;--30天的感謝-與-未來更新&#34;&gt;-&amp;gt; 30天的感謝 與 未來更新&lt;/h2&gt;
&lt;p&gt;到了今天已經第30天了，很感謝所有一直默默在追隨的讀者們，&lt;br&gt;
另外也很感謝我的朋友們，願意讓我洗我的fb版面還沒刪我好友XDDD，&lt;br&gt;
另外也很感謝我的同事、主管、部分朋友，一直很支持我寫完這系列的主題，&lt;br&gt;
在30天途中也給了我不少能寫東西的點子，讓我有源源不絕的題目。&lt;br&gt;
其實我也沒想到自己居然最後乾脆自己做一個 photoshop 雛形出來，&lt;br&gt;
所以說沒錢買 photoshop，就乾脆自己把 photoshop 做出來嗎&amp;hellip;&lt;/p&gt;
&lt;p&gt;未來的話，其實這30天並不是終點，&lt;br&gt;
因為我也還有很多題目還沒寫完&amp;hellip;，&lt;br&gt;
這30天的 OpenCV 學習筆記讓我學習到了不少新東西，&lt;br&gt;
也等同於預寫了很多實用的函數，之後可以直接在需要時使用，&lt;br&gt;
(當然有需要的朋友也能夠直接拿去用哈哈哈哈哈)，&lt;br&gt;
但連續寫30天的我，也需要先休息一下XD，&lt;br&gt;
該出去玩不要再待在電腦前當個技術宅了XDDD，&lt;br&gt;
之後還是會繼續寫，不定期更新，&lt;br&gt;
我會繼續把實用的函數整理起來等著以後自用與順便幫助別人，&lt;br&gt;
以上，再次感謝所有支持我的人們。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10251278&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 30 - Final Project v3，於是沒錢買ps的我，開發了自己的photoshop，我的天啊 My photoshop made by OpenCV&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;!--
Post ID: 909
Post Date: 2020-10-12 02:07:08
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】29 - Final Project v2 — 於是沒錢買 ps 的我，開發了自己的 photoshop</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-my-photoshop-v2/</link>
        <pubDate>Sun, 11 Oct 2020 02:04:37 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-my-photoshop-v2/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424hCiedxcO8V.png" alt="Featured image of post 【OpenCV】29 - Final Project v2 — 於是沒錢買 ps 的我，開發了自己的 photoshop" /&gt;&lt;h2 id=&#34;my-photoshop-ver20&#34;&gt;My photoshop ver2.0&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424hCiedxcO8V.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424hCiedxcO8V.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424hCiedxcO8V_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424hCiedxcO8V_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】29 - Final Project v2 — 於是沒錢買 ps 的我，開發了自己的 photoshop&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;功能列表&#34;&gt;功能列表&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ------  My photoshop Release notes ------ #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ver2.0 (2020.10.11)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增視窗&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;My&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;histogram&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;可以隨時查看現在圖片的&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RGB直方圖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增視窗&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;My&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;panel&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;可以自己選顏色&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;自己畫點&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ver1.0 (2020.10.10)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增儲存檔案功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;離開應用程式的穩定優化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;3.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增關閉程式的文字提示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;4.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增調整光線&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;對比度功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;5.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增調整明度&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;飽和度功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;6.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增旋轉圖片功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;7.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增可增加圖片噪點的功能&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;相當於增加圖片顆粒感&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day29_My_photoshop_v2.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day29_My_photoshop_v2.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;所以沒錢買 photoshop 的我，最後自己做了一個 photoshop 嗎&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;這系列會把之前所學到的東西全部整理到一支程式中，&lt;br&gt;
當然我知道如果「用類似 QT 可以整出更好的視覺化界面」，&lt;br&gt;
但我們的重點還是放回「只靠 OpenCV 能做的極限」能到哪邊哈哈哈&lt;/p&gt;
&lt;h2 id=&#34;新增功能一覽&#34;&gt;新增功能一覽&lt;/h2&gt;
&lt;h3 id=&#34;1-新增視窗-my-histogram可以隨時查看現在圖片的-rgb直方圖&#34;&gt;1. 新增視窗 「My histogram」，可以隨時查看現在圖片的 RGB直方圖&lt;/h3&gt;
&lt;p&gt;相關文章：&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10244284&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 14 - 進階修圖1，運用 OpenCV 顯示圖片直方圖、分離與合併RGB通道 show histogram, split, merge RGB channel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我自己的印象中，photoshop 好像都會有個直方圖都在旁邊可以隨時查看?&lt;br&gt;
那我們來自己做吧!&lt;/p&gt;
&lt;h4 id=&#34;1-1-建立新視窗-my-histogram&#34;&gt;1-1. 建立新視窗 &amp;ldquo;My histogram&amp;rdquo;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 直方圖視窗&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;My histogram&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;window_flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# cv2.WINDOW_NORMAL)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;1-2-使用之前教學的函數畫出圖片-rgb直方圖&#34;&gt;1-2. 使用之前教學的函數，畫出圖片 RGB直方圖&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plot_histogram&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;show_histogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 顯示調整後的效果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;My histogram&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plot_histogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;1-3-最大難題如何把-plot-變成-圖片&#34;&gt;1-3. 最大難題：如何把 plot 變成 圖片?&lt;/h4&gt;
&lt;p&gt;這問題才是這次更新功能最大的難關啊，&lt;br&gt;
我們之前絕大部分的plot都是直接顯示在 「jupyter notebook」 中，&lt;br&gt;
現在要把它變成圖片移出來，該怎麼辦呢?&lt;/p&gt;
&lt;h4 id=&#34;1-3-1-failed-嘗試使用-pltshow&#34;&gt;1-3-1. (failed) 嘗試使用 plt.show()&lt;/h4&gt;
&lt;p&gt;plt.show() 我記得可以直接另外開啟視窗產生出圖片繪製結果，&lt;br&gt;
但在 「jupyter notebook」 中，似乎沒辦法這樣做。&lt;/p&gt;
&lt;h4 id=&#34;1-3-2-passed-儲存-plt-為-jpg-檔後再用-opencv-讀取&#34;&gt;1-3-2. (passed?) 儲存 plt 為 jpg 檔後，再用 OpenCV 讀取&lt;/h4&gt;
&lt;p&gt;&lt;del&gt;看標題就知道一定會成功了&lt;/del&gt;，&lt;br&gt;
總之這也是很直覺的方法，直接儲存圖片後再讀取圖片，&lt;br&gt;
但這會有一個很大的問題，「我們的硬碟無時無刻都會一直在讀寫」&amp;hellip;&lt;/p&gt;
&lt;p&gt;長久下來絕對不是一個好的方案 (&lt;del&gt;除非想更快換硬碟&lt;/del&gt;)&lt;/p&gt;
&lt;h4 id=&#34;1-3-3-最佳化-儲存-plt-進-memory-buffer-後再讀取出來&#34;&gt;1-3-3. (最佳化) 儲存 plt 進 memory buffer 後，再讀取出來&lt;/h4&gt;
&lt;p&gt;這個方法的精隨在於，他「並沒有實際上做儲存檔案的動作」，&lt;br&gt;
而只是把這些資訊暫時放在記憶體的某個位置上，&lt;br&gt;
而我們能用如同 1-3-2. 的方法把圖片讀取出來。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show_histogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;fig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ax&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subplots&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 畫出 RGB 三種顏色的分佈圖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dark_background&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;enumerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;histogram&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;calcHist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;histogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fig&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;canvas&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print_to_buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plot_histogram&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frombuffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reshape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plot_histogram&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-新增視窗-my-color-panel可以自己選色並作畫&#34;&gt;2. 新增視窗 「My color panel」，可以自己選色並作畫&lt;/h3&gt;
&lt;p&gt;這個不論是 photoshop 或 小畫家 應該都有的功能吧!&lt;br&gt;
我們先新增一個能夠顯示顏色的視窗:&lt;/p&gt;
&lt;h4 id=&#34;2-1-建立新視窗-my-color-panel&#34;&gt;2-1. 建立新視窗 &amp;ldquo;My color panel&amp;rdquo;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 控制顏色&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;My color panel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;window_flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# cv2.WINDOW_NORMAL)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-2-建立-rgb滑動條並顯示對應顏色&#34;&gt;2-2. 建立 RGB滑動條，並顯示對應顏色&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create trackbars for color change&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createTrackbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;R&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nothing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createTrackbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;G&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nothing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createTrackbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nothing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;color_panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getTrackbarPos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;R&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getTrackbarPos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;G&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getTrackbarPos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color_rgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color_rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 改變顯示 window 的內容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color_rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resizeWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;My color panel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用昨天提到的 「cv2.getTrackbarPos」 得到顏色的回傳值，&lt;br&gt;
並使用 「color_rgb[:] = [data[&amp;lsquo;b&amp;rsquo;], data[&amp;lsquo;g&amp;rsquo;], data[&amp;lsquo;r&amp;rsquo;]]」，&lt;br&gt;
組合顏色並顯示顏色。&lt;/p&gt;
&lt;h4 id=&#34;2-3-建立打點用的筆並對圖片作畫&#34;&gt;2-3. 建立打點用的筆，並對圖片作畫&lt;/h4&gt;
&lt;p&gt;這部分的細節可以參考：&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248830&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 23 - 綜合運用2，(資料標註) 用 OpenCV 來製作一個標記點小工具吧! 滑鼠與視窗控制 label points&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這邊我特別說明我們需要製作一個開關，來偵測現在是否開啟打點模式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;製作開關：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createTrackbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nothing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;偵測開關：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getTrackbarPos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My color panel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;如果開關打開，才是開啟打點模式：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 標記點位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顯示修改的 (x,y) 位置 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;change points: (x, y) = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2-4-最後注意-imshow-圖片更新邏輯&#34;&gt;2-4. 最後，注意 imshow 圖片更新邏輯&lt;/h4&gt;
&lt;p&gt;我們需要注意一件事情，&lt;br&gt;
昨天我們的內容大多數都是「「從原圖」出發，依據對應值開始調整畫面」，&lt;/p&gt;
&lt;p&gt;但這次的打點內容，是「需要被保存在圖片上的」。&lt;br&gt;
因此我們必須要修改這部分的程式邏輯，&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color_panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;我們每次進行打點時，「更新原來的圖片」，&lt;/li&gt;
&lt;li&gt;而做其他變化時，「不更新原來的圖片，從原圖片出發開始計算」。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這樣就可以開始我們的作畫囉~~~!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10251272&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 29 - Final Project v2，於是沒錢買ps的我，開發了自己的photoshop，我的天啊 My photoshop made by OpenCV&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itdaan.com/tw/6488189fb5d7d60b163039cd0a004f70&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itdaan.com/tw/6488189fb5d7d60b163039cd0a004f70&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/jacke121/article/details/54718563&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/jacke121/article/details/54718563&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/aa846555831/article/details/52372884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/aa846555831/article/details/52372884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://web-backend.icare.univ-lille.fr/tutorials/convert_a_matplotlib_figure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://web-backend.icare.univ-lille.fr/tutorials/convert_a_matplotlib_figure&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itread01.com/content/1547426526.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itread01.com/content/1547426526.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.shengwn.com/page/2018-07-22/how_to_make_a_filter_with_python.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.shengwn.com/page/2018-07-22/how_to_make_a_filter_with_python.htm&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/aa846555831/article/details/52372884&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/aa846555831/article/details/52372884&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.thetopsites.net/article/58641662.shtml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.thetopsites.net/article/58641662.shtml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/fanjiule/article/details/81606596&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/fanjiule/article/details/81606596&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/wuyoy520/article/details/47111295&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/wuyoy520/article/details/47111295&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 898
Post Date: 2020-10-11 02:04:37
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】28 - Final Project v1 — 於是沒錢買 ps 的我，開發了自己的 photoshop</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-my-photoshop-v1/</link>
        <pubDate>Sat, 10 Oct 2020 02:02:04 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-my-photoshop-v1/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424tR7UlqKPIz.png" alt="Featured image of post 【OpenCV】28 - Final Project v1 — 於是沒錢買 ps 的我，開發了自己的 photoshop" /&gt;&lt;h2 id=&#34;my-photoshop-ver10&#34;&gt;My photoshop ver1.0&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424tR7UlqKPIz.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424tR7UlqKPIz.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424tR7UlqKPIz_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424tR7UlqKPIz_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】28 - Final Project v1 — 於是沒錢買 ps 的我，開發了自己的 photoshop&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;功能列表&#34;&gt;功能列表&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ------  My photoshop Release notes ------ #&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ver1.0 (2020.10.10)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增儲存檔案功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;2.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;離開應用程式的穩定優化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;3.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增關閉程式的文字提示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;4.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增調整光線&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;對比度功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;5.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增調整明度&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;飽和度功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;6.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增旋轉圖片功能&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mf&#34;&gt;7.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;新增可增加圖片噪點的功能&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;相當於增加圖片顆粒感&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day28_My_photoshop_v1.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day28_My_photoshop_v1.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;所以沒錢買 photoshop 的我，最後自己做了一個 photoshop 嗎&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;這系列會把之前所學到的東西全部整理到一支程式中，&lt;br&gt;
當然我知道如果「用類似 QT 可以整出更好的視覺化界面」，&lt;br&gt;
但我們的重點還是放回「只靠 OpenCV 能做的極限」能到哪邊哈哈哈&lt;/p&gt;
&lt;h2 id=&#34;新增功能一覽&#34;&gt;新增功能一覽&lt;/h2&gt;
&lt;h3 id=&#34;1-新增儲存檔案功能&#34;&gt;1. 新增儲存檔案功能&lt;/h3&gt;
&lt;p&gt;讀檔存檔根本是修圖的基本功能啊! 當然第一個要最優先做!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imwrite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;result.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;很簡單，就一個存檔而已。&lt;/p&gt;
&lt;h3 id=&#34;2-離開應用程式的穩定優化&#34;&gt;2. 離開應用程式的穩定優化&lt;/h3&gt;
&lt;p&gt;OpenCV 的 imshow 視窗非常容易卡死&amp;hellip;&lt;br&gt;
這可能算是萬年問題了&lt;/p&gt;
&lt;p&gt;基本上這個也應該要優先處理，&lt;br&gt;
免得我們做出一支關不掉的程式。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顯示調整後的效果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;My photoshop&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ch&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ch&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 按 ESC 鍵退出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ch&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;ord&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 按 s 鍵保存結果並退出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imwrite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;result.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 關閉所有的窗口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面就是我們設計的架構，&lt;br&gt;
我們不使用單純的 「cv2.waitKey(0)」，&lt;br&gt;
(他會無限偵測是否有按鍵輸入，才關閉，這並不是很穩定)，&lt;/p&gt;
&lt;p&gt;我們改使用 「while True」 製造無限迴圈，&lt;br&gt;
搭配上 「cv2.waitKey(5)」 等待 5ms 自動關閉，&lt;br&gt;
但又因為無限迴圈的關係，圖片並不會消失，&lt;br&gt;
結束程式的方式由我們自己來控制。&lt;/p&gt;
&lt;p&gt;結束程式的方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if ch == 27:
&lt;ul&gt;
&lt;li&gt;如果按下 「ESC」，則 「break」 結束迴圈&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;elif ch == ord(&amp;rsquo;s&amp;rsquo;):
&lt;ul&gt;
&lt;li&gt;如果按下 &lt;code&gt;S&lt;/code&gt;，則保存圖片後，「break」 結束迴圈&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;「注意：用了這樣的寫法後，不使用這兩個方式是關不掉程式的哦!」&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;最後用 OpenCV內建的 &lt;code&gt;cv2.destroyAllWindows()&lt;/code&gt; 釋出資源，&lt;br&gt;
達到穩定關閉程式的結果。&lt;/p&gt;
&lt;h3 id=&#34;3-新增關閉程式的文字提示&#34;&gt;3. 新增關閉程式的文字提示&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Press ESC to exit, or press S to save and exit.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_COMPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們在圖片左下角放上這層文字:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「&amp;ldquo;Press ESC to exit, or press S to save and exit.&amp;quot;」&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;我們先用下面這行找到圖片的高與寬：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img_copy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然後得到圖片的高以後就能夠精準的放上文字了!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「注意: 保存檔案的時候記得不要把文字也保存起來了! (除非你想要這行文字啦)」&lt;br&gt;
稍微注意一下這部分的程式邏輯~~~&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;上面把基本的程式架構都寫出來了，再來就只剩最單純的新增功能了：&lt;/p&gt;
&lt;h3 id=&#34;4-新增調整光線對比度功能&#34;&gt;4. 新增調整光線、對比度功能&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10240032&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 8 - 日系濾鏡5，運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;5-新增調整明度飽和度功能&#34;&gt;5. 新增調整明度、飽和度功能&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10236901&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 5 - 日系濾鏡2，運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間) modify lightness, saturation&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;6-新增旋轉圖片功能&#34;&gt;6. 新增旋轉圖片功能&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10236235&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 3 - 基本修圖2，OpenCV 圖片的剪裁、旋轉、縮放 (crop, rotate, resize)，在 jupyter 中直接找尋圖片的座標&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;7-新增可增加圖片噪點的功能相當於增加圖片顆粒感&#34;&gt;7. 新增可增加圖片噪點的功能，相當於增加圖片顆粒感&lt;/h3&gt;
&lt;p&gt;reference: &lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10239714&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 7 - 日系濾鏡4，運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這部分歡迎參考我之前的文章，而這裡我著重講怎麼樣在視窗介面中實現這些功能。&lt;/p&gt;
&lt;h2 id=&#34;用-opencv-內建的功能產生新視窗滑動條&#34;&gt;用 OpenCV 內建的功能產生新視窗、滑動條&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 修圖主視窗&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;My photoshop&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WINDOW_AUTOSIZE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# cv2.WINDOW_NORMAL)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這樣我們就能建立一個名字叫做 &amp;ldquo;My photoshop&amp;rdquo; 的視窗了。&lt;/p&gt;
&lt;h2 id=&#34;用-opencv-內建的功能產生滑動條&#34;&gt;用 OpenCV 內建的功能產生滑動條&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;nothing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createTrackbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;rotation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;My photoshop&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nothing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;rotation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getTrackbarPos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rotation&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;My photoshop&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;主要有上面兩行，但在這之前我們需要先建立一個新視窗，&lt;br&gt;
在 「第二個參數 &amp;ldquo;My photoshop&amp;rdquo;」 中，他對應的就是「視窗的名稱」，&lt;/p&gt;
&lt;p&gt;第一行 「cv2.createTrackbar(&amp;ldquo;滑動條名稱&amp;rdquo;, &amp;ldquo;視窗名稱&amp;rdquo;, 最小值, 最大值, nothing)」&lt;br&gt;
第二行 「回傳值 = cv2.getTrackbarPos(&amp;ldquo;滑動條名稱&amp;rdquo;, &amp;ldquo;視窗名稱&amp;rdquo;)」&lt;/p&gt;
&lt;p&gt;我們在這之後就能運用回傳值實現我們各種想要的功能囉!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10250659&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 28 - Final Project v1，於是沒錢買ps的我，開發了自己的photoshop，我的天啊 My photoshop made by OpenCV&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itdaan.com/tw/6488189fb5d7d60b163039cd0a004f70&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itdaan.com/tw/6488189fb5d7d60b163039cd0a004f70&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/jacke121/article/details/54718563&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/jacke121/article/details/54718563&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/aa846555831/article/details/52372884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/aa846555831/article/details/52372884?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://web-backend.icare.univ-lille.fr/tutorials/convert_a_matplotlib_figure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://web-backend.icare.univ-lille.fr/tutorials/convert_a_matplotlib_figure&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itread01.com/content/1547426526.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itread01.com/content/1547426526.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.shengwn.com/page/2018-07-22/how_to_make_a_filter_with_python.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.shengwn.com/page/2018-07-22/how_to_make_a_filter_with_python.htm&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/aa846555831/article/details/52372884&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/aa846555831/article/details/52372884&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.thetopsites.net/article/58641662.shtml&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.thetopsites.net/article/58641662.shtml&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/fanjiule/article/details/81606596&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/fanjiule/article/details/81606596&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/wuyoy520/article/details/47111295&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/wuyoy520/article/details/47111295&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 890
Post Date: 2020-10-10 02:02:04
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】27 - 顏色映射 — OpenCV 內建的自動配色 (cv2.applyColorMap)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-applycolormap/</link>
        <pubDate>Fri, 09 Oct 2020 01:59:54 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-applycolormap/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/201204246f3yxNCZxz.png" alt="Featured image of post 【OpenCV】27 - 顏色映射 — OpenCV 內建的自動配色 (cv2.applyColorMap)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424End6xbF1xp.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424End6xbF1xp.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424End6xbF1xp_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424End6xbF1xp_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】27 - 顏色映射 — OpenCV 內建的自動配色 (cv2.applyColorMap)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;覺得好看嗎? &lt;del&gt;「但其實這通常不是拿來這樣用的」&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day27_%E9%A1%8F%E8%89%B2%E6%98%A0%E5%B0%84_colormap.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day27_顏色映射_colormap.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;花式修圖的這個系列&amp;hellip;&lt;br&gt;
主要會講的是一些比進階再更進階的內容，&lt;br&gt;
會有比較多冷門的功能，或是更難的演算法。&lt;/p&gt;
&lt;h2 id=&#34;顏色映射---opencv-內建的自動配色&#34;&gt;顏色映射 - OpenCV 內建的自動配色?!&lt;/h2&gt;
&lt;p&gt;今天要來介紹的是 OpenCV 中通常比較少(?)被使用的顏色映射函數 「cv2.applyColorMap」，&lt;br&gt;
其實他主要的用途是被拿來做「黑白圖片(一維度的值) 重新配色」，&lt;br&gt;
例如像是我們常見的「溫度圖」，「等高線圖」等等，會利用到這東西。&lt;/p&gt;
&lt;p&gt;例如 (這很常見吧&lt;del&gt;) ：&lt;br&gt;
&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424xSqrbKJ8xF.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424xSqrbKJ8xF.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424xSqrbKJ8xF_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424xSqrbKJ8xF_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】27 - 顏色映射 — OpenCV 內建的自動配色 (cv2.applyColorMap)&#34;  &gt;&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&#34;我們可以參考-opencv-官方的顏色映射對照&#34;&gt;我們可以參考 OpenCV 官方的顏色映射對照&lt;/h3&gt;
&lt;p&gt;網址：https://docs.opencv.org/3.4/d3/d50/group__imgproc__colormap.html#ga9a805d8262bcbe273f16be9ea2055a65&lt;/p&gt;
&lt;p&gt;(我只擷取部分)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/201204248rv4yBP0mu.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/201204248rv4yBP0mu.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/201204248rv4yBP0mu_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/201204248rv4yBP0mu_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】27 - 顏色映射 — OpenCV 內建的自動配色 (cv2.applyColorMap)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;我們大概可以看得出來，不同情況下的顏色對照值，&lt;br&gt;
「從左至右也代表著 從 0(黑) 到 255(白) 的對應」。&lt;/p&gt;
&lt;h3 id=&#34;來看看怎麼實現顏色映射吧&#34;&gt;來看看怎麼實現顏色映射吧!&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;result_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;applyColorMap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLORMAP_XXX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;嘿對，你沒看錯就一行。&lt;br&gt;
而 「cv2.COLORMAP_XXX」 我們需要去文件中查表後才知道自己想使用哪一個，&lt;br&gt;
(表就是上面那個網址的連結，或者也可以直接參考我結果圖上面的名稱。)&lt;/p&gt;
&lt;p&gt;再來就看自己想要怎麼使用囉~~~&lt;/p&gt;
&lt;p&gt;我們再來看看另外一張風景圖的顏色映射~&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/201204246f3yxNCZxz.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/201204246f3yxNCZxz.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/201204246f3yxNCZxz_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/201204246f3yxNCZxz_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】27 - 顏色映射 — OpenCV 內建的自動配色 (cv2.applyColorMap)&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10251240&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 27 - 花式修圖4，顏色映射 - OpenCV 內建的自動配色?! auto recolor images, cv2.applyColorMap&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_filtering/py_filtering.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_filtering/py_filtering.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://chtseng.wordpress.com/2016/11/17/python-%E8%88%87-opencv-%E6%A8%A1%E7%B3%8A%E8%99%95%E7%90%86/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://chtseng.wordpress.com/2016/11/17/python-%E8%88%87-opencv-%E6%A8%A1%E7%B3%8A%E8%99%95%E7%90%86/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/loveliuzz/article/details/73648505&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/loveliuzz/article/details/73648505&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.opencv.org/3.4/d3/d50/group__imgproc__colormap.html#ga9a805d8262bcbe273f16be9ea2055a65&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.opencv.org/3.4/d3/d50/group__imgproc__colormap.html#ga9a805d8262bcbe273f16be9ea2055a65&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itread01.com/content/1545834246.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itread01.com/content/1545834246.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 887
Post Date: 2020-10-09 01:59:54
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】26 - 銳化圖片，將模糊的圖片變得更清晰吧！ sharpen images</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-sharpen-images/</link>
        <pubDate>Thu, 08 Oct 2020 01:57:59 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-sharpen-images/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424P2VHSCgPuZ.png" alt="Featured image of post 【OpenCV】26 - 銳化圖片，將模糊的圖片變得更清晰吧！ sharpen images" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424VeUU4yFCsc.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424VeUU4yFCsc.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424VeUU4yFCsc_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424VeUU4yFCsc_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】26 - 銳化圖片，將模糊的圖片變得更清晰吧！ sharpen images&#34;  &gt;&lt;/p&gt;
&lt;p&gt;上圖為了強化效果，我們將 「sigma值 設定為 100」，我們比較一下原圖：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424P2VHSCgPuZ.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424P2VHSCgPuZ.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424P2VHSCgPuZ_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424P2VHSCgPuZ_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】26 - 銳化圖片，將模糊的圖片變得更清晰吧！ sharpen images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day26_%E9%8A%B3%E5%8C%96_sharpen.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day26_銳化_sharpen.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;基本修圖技能學習完之後，&lt;br&gt;
再來我們要來學一些比較進階會使用的修圖技巧囉！&lt;/p&gt;
&lt;h2 id=&#34;銳化圖片將模糊的圖片變得更清晰吧&#34;&gt;銳化圖片，將模糊的圖片變得更清晰吧！&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sharpen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sigma&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# sigma = 5、15、25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;blur_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GaussianBlur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sigma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;usm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addWeighted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;blur_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;usm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;今天來寫一個小章節，但非常的實用。&lt;br&gt;
我們往往在拍照時會受限於解析度的關係，&lt;br&gt;
導致拍出來的照片有些較為模糊的邊緣，&lt;br&gt;
模糊的邊緣我們能再使用銳化使它變得更銳利，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其實&lt;code&gt;銳化&lt;/code&gt;就是&lt;code&gt;模糊&lt;/code&gt;的反操作哦！&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;銳化的功能實現&#34;&gt;銳化的功能實現&lt;/h3&gt;
&lt;p&gt;首先我們先使用 「cv2.GaussianBlur」 產生高斯模糊圖片，&lt;br&gt;
我們說&lt;code&gt;銳化&lt;/code&gt;就是&lt;code&gt;模糊&lt;/code&gt;的反操作，&lt;br&gt;
因此我們再使用 「cv2.addWeighted(img, 1.5, blur_img, -0.5, 0)」&lt;br&gt;
以「原圖 : 模糊圖片= 1.5 : -0.5」 的比例進行混合。&lt;/p&gt;
&lt;p&gt;就能得到銳化後的圖片囉！&lt;/p&gt;
&lt;p&gt;如果想要效果更強，可以在 「cv2.GaussianBlur」 調高 「sigma值」，&lt;br&gt;
不過在本文中為了凸顯效果，已經將 「sigma值」 設定的太高了，&lt;br&gt;
一般來說使用上我們不會設定 「sigma = 100」 這麼大的值。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10250742&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 26 - 進階修圖6，銳化圖片，將模糊的圖片變得更清晰吧！ sharpen images&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.shengwn.com/page/2018-07-22/how_to_make_a_filter_with_python.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.shengwn.com/page/2018-07-22/how_to_make_a_filter_with_python.htm&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/elegentbeauty/article/details/79849887&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/elegentbeauty/article/details/79849887&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/63502539&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/63502539&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 879
Post Date: 2020-10-08 01:57:59
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-warpperspective/</link>
        <pubDate>Wed, 07 Oct 2020 01:55:37 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-warpperspective/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424t8nWLJUUKB.png" alt="Featured image of post 【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424DaGIX4RcQU.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424DaGIX4RcQU.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424DaGIX4RcQU_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424DaGIX4RcQU_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day25_%E7%AC%A6%E5%90%88p%E5%9C%96%E8%BC%AA%E5%BB%93%E7%9A%84%E8%AE%8A%E5%BD%A2%E5%9C%96%E7%89%87_merge_two_images_transform.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day25_符合p圖輪廓的變形圖片_merge_two_images_transform.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們該來運用之前學過的所有東西了!&lt;br&gt;
綜合運用篇就是來一次運用前面的所學!&lt;/p&gt;
&lt;h2 id=&#34;用-opencv-來把圖片p到各種奇怪的地方吧&#34;&gt;用 OpenCV 來把圖片p到各種奇怪的地方吧！&lt;/h2&gt;
&lt;p&gt;今天的功能與昨天的內容非常像，而我們今天來把圖片p到想要的地方：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主程式 (讀取圖片)&lt;/li&gt;
&lt;li&gt;運用&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248830&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;前天的內容&lt;/a&gt;，製作一個能讀取座標點的滑鼠控制畫面 (滑鼠處理)&lt;/li&gt;
&lt;li&gt;利用滑鼠控制回傳的座標進行透視投影運算
&lt;ul&gt;
&lt;li&gt;取得要p圖片的四個座標&lt;/li&gt;
&lt;li&gt;找到最佳映射矩陣，並建立透視投影後的圖片&lt;/li&gt;
&lt;li&gt;將原圖片需要更改的部分，利用mask挖去&lt;/li&gt;
&lt;li&gt;最後合併兩張圖片，得到結果&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主程式-讀取圖片&#34;&gt;主程式 (讀取圖片)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Read the destination image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;./testdata/tv.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;origin image: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Click on four corners of bllboard and the press ENTER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這部分就單純的讀取圖片，&lt;br&gt;
我們使用我們定義的 「get_points」 來幫助我們找到 「輪廓的四個座標點」。&lt;/p&gt;
&lt;h3 id=&#34;運用前天的內容製作一個能讀取座標點的滑鼠控制畫面-滑鼠處理&#34;&gt;運用&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248830&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;前天的內容&lt;/a&gt;，製作一個能讀取座標點的滑鼠控制畫面 (滑鼠處理)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;mouse_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;event&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EVENT_LBUTTONDOWN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 標記點位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 改變顯示 window 的內容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 顯示 (x,y) 並儲存到 list中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;get points: (x, y) = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 建立 data dict, img:存放圖片, points:存放點&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 建立一個 window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 改變 window 成為適當圖片大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;img height, width: (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resizeWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顯示圖片在 window 中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 利用滑鼠回傳值，資料皆保存於 data dict中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setMouseCallback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mouse_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 等待關閉視窗，藉由 OpenCV 內建函數釋放資源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 回傳點 list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這部分都與前天的成品相同，可參考昨天的描述。&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;這是我們取的四個點：&lt;br&gt;
(注意：請「從左上角」，依照「順時針」順序，在圖片的四個角落「點四個點」)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424IS62cQG97G.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424IS62cQG97G.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424IS62cQG97G_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424IS62cQG97G_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;利用滑鼠控制回傳的座標進行透視投影運算&#34;&gt;利用滑鼠控制回傳的座標進行透視投影運算&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 垂直堆疊點&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;points_2D&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vstack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;points_2D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們將回傳的點座標堆疊成一個 「2D list」。&lt;/p&gt;
&lt;h4 id=&#34;取得要p圖片的四個座標&#34;&gt;取得要p圖片的四個座標&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;p_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;./testdata/cat.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p_img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pst_src&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;float&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;找到最佳映射矩陣並建立透視投影後的圖片&#34;&gt;找到最佳映射矩陣，並建立透視投影後的圖片&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;findHomography&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pst_src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;points_2D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# print(h)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 透視投影 (建立變形後的圖)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;image after reshape: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;im_temp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warpPerspective&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;im_temp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;透視後的圖片大概是長這樣~~~&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424CyzlvtLyau.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424CyzlvtLyau.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424CyzlvtLyau_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424CyzlvtLyau_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;將原圖片需要更改的部分利用mask挖去&#34;&gt;將原圖片需要更改的部分，利用mask挖去&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 填充多邊形 - 黑色 (該區域全為0)，等同於覆蓋上 mask&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;add mask: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillConvexPoly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;points_2D&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424J1ws45EHHc.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424J1ws45EHHc.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424J1ws45EHHc_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424J1ws45EHHc_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;最後合併兩張圖片得到結果&#34;&gt;最後合併兩張圖片，得到結果&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add wraped source image to destination image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;result image: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;im_temp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424t8nWLJUUKB.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424t8nWLJUUKB.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424t8nWLJUUKB_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424t8nWLJUUKB_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/143035374&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/143035374&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/code/3oqxejy.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/code/3oqxejy.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/fanjiule/article/details/81606596&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/fanjiule/article/details/81606596&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/yefcion/article/details/79435591&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/yefcion/article/details/79435591&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/fengyeer20120/article/details/87798638&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/fengyeer20120/article/details/87798638&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10250288&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 25 - 綜合運用4，用 OpenCV 來把圖片p到各種奇怪的地方吧！ 透視投影 cv2.warpPerspective, merge two images&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;!--
Post ID: 876
Post Date: 2020-10-07 01:55:37
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】24 - 綜合運用3，(應用app) 用 OpenCV 來製作一個照片文件掃描機吧! photo scanner 透視投影</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-photo-scanner/</link>
        <pubDate>Tue, 06 Oct 2020 01:53:39 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-photo-scanner/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/migrated/Qbw87FR.gif" alt="Featured image of post 【OpenCV】24 - 綜合運用3，(應用app) 用 OpenCV 來製作一個照片文件掃描機吧! photo scanner 透視投影" /&gt;&lt;h2 id=&#34;先來看看今天的結果gif&#34;&gt;先來看看今天的結果gif&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424cPv7Hcd7i8.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424cPv7Hcd7i8.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424cPv7Hcd7i8_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424cPv7Hcd7i8_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】24 - 綜合運用3，(應用app) 用 OpenCV 來製作一個照片文件掃描機吧! photo scanner 透視投影&#34;  &gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/Qbw87FR.gif&#34;    loading=&#34;lazy&#34;  alt=&#34;【OpenCV】24 - 綜合運用3，(應用app) 用 OpenCV 來製作一個照片文件掃描機吧! photo scanner 透視投影&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day24_%E8%87%AA%E8%A3%BD%E6%96%87%E4%BB%B6%E6%8E%83%E6%8F%8F%E6%A9%9F_photo_scanner.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day24_自製文件掃描機_photo_scanner.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們該來運用之前學過的所有東西了!&lt;br&gt;
綜合運用篇就是來一次運用前面的所學!&lt;/p&gt;
&lt;h2 id=&#34;應用app-用-opencv-來製作一個照片文件掃描機吧&#34;&gt;(應用app) 用 OpenCV 來製作一個照片文件掃描機吧!&lt;/h2&gt;
&lt;p&gt;我們要製作一個照片文件掃描機，邏輯上大致要完成以下步驟：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主程式 (讀取圖片)&lt;/li&gt;
&lt;li&gt;運用&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248830&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;昨天的內容&lt;/a&gt;，製作一個能讀取座標點的滑鼠控制畫面 (滑鼠處理)&lt;/li&gt;
&lt;li&gt;利用滑鼠控制回傳的座標進行透視投影運算&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主程式-讀取圖片&#34;&gt;主程式 (讀取圖片)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Read the destination image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;./testdata/paper.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;origin image: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Click on four corners of bllboard and the press ENTER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pts1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;float32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這部分就單純的讀取圖片，&lt;br&gt;
我們使用我們定義的 「get_points」 來幫助我們找到「輪廓的四個座標點」。&lt;/p&gt;
&lt;p&gt;(注意：請「從左上角」，依照「順時針」順序，在圖片的四個角落「點四個點」)&lt;/p&gt;
&lt;h3 id=&#34;運用昨天的內容製作一個能讀取座標點的滑鼠控制畫面-滑鼠處理&#34;&gt;運用&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248830&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;昨天的內容&lt;/a&gt;，製作一個能讀取座標點的滑鼠控制畫面 (滑鼠處理)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;mouse_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;event&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EVENT_LBUTTONDOWN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 標記點位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 改變顯示 window 的內容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 顯示 (x,y) 並儲存到 list中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;get points: (x, y) = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 建立 data dict, img:存放圖片, points:存放點&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 建立一個 window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 改變 window 成為適當圖片大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;img height, width: (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WINDOW_AUTOSIZE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# cv2.WINDOW_NORMAL)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顯示圖片在 window 中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 利用滑鼠回傳值，資料皆保存於 data dict中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setMouseCallback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mouse_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 等待關閉視窗，藉由 OpenCV 內建函數釋放資源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 回傳點 list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這部分都與昨日的成品相同，可參考昨天的描述。&lt;br&gt;
&lt;/p&gt;
&lt;h3 id=&#34;利用滑鼠控制回傳的座標進行透視投影運算&#34;&gt;利用滑鼠控制回傳的座標進行透視投影運算&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;target_height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;842&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# A4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;target_width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;595&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# A4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pts2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;float32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target_width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target_width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target_height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target_height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 計算最佳變形矩陣&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPerspectiveTransform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pts1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pts2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將原圖使用變形矩陣做透視變換&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warpPerspective&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ori_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target_width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;photo scanner result: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bigger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Doing threshold: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;resgray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 先將圖片轉為灰階    &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Otsu&amp;#39;s thresholding&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thresh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resgray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_OTSU&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bigger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 顯示圖片在 window 中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Scanner&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Threshold&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們先定義好文件的大小 (這裡是 「A4紙的大小(842x595)」)，&lt;/p&gt;
&lt;p&gt;我們使用 「cv2.getPerspectiveTransform」，計算最佳變形矩陣，&lt;br&gt;
我們可透過這行的結果將原圖片透過矩陣運算做最適當的變形。&lt;/p&gt;
&lt;p&gt;我們運用上面算出的矩陣搭配 「cv2.warpPerspective」，&lt;br&gt;
將原圖進行透視變換 (上一行只有計算最佳變形矩陣，這一行才有變形)。&lt;br&gt;
算出來的就是我們要的結果囉~~~&lt;/p&gt;
&lt;p&gt;最後我們還能再自己使用 「Otsu&amp;rsquo;s thresholding」 做二值化，&lt;br&gt;
將文件轉為黑白文件，就像印表機印出來的結果一樣呢！&lt;/p&gt;
&lt;p&gt;&lt;del&gt;(自己做就不用載需要付費的app囉)&lt;/del&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10249764&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 24 - 綜合運用3，(應用app) 用 OpenCV 來製作一個照片文件掃描機吧! photo scanner 透視投影&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/on2way/article/details/46801063&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/on2way/article/details/46801063&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 868
Post Date: 2020-10-06 01:53:39
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】23 - 綜合運用2 — 用 OpenCV 製作標記點小工具(滑鼠與視窗控制)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-label-points/</link>
        <pubDate>Mon, 05 Oct 2020 01:51:05 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-label-points/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/migrated/nYlBsmC.gif" alt="Featured image of post 【OpenCV】23 - 綜合運用2 — 用 OpenCV 製作標記點小工具(滑鼠與視窗控制)" /&gt;&lt;h2 id=&#34;先來看看今天的結果gif&#34;&gt;先來看看今天的結果gif&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424CaI5dUn99a.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424CaI5dUn99a.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424CaI5dUn99a_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424CaI5dUn99a_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】23 - 綜合運用2 — 用 OpenCV 製作標記點小工具(滑鼠與視窗控制)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/migrated/nYlBsmC.gif&#34;    loading=&#34;lazy&#34;  alt=&#34;【OpenCV】23 - 綜合運用2 — 用 OpenCV 製作標記點小工具(滑鼠與視窗控制)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day23_%E6%A8%99%E8%A8%98%E9%BB%9E%E5%B0%8F%E5%B7%A5%E5%85%B7_label_points.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day23_標記點小工具_label_points.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們該來運用之前學過的所有東西了!&lt;br&gt;
綜合運用篇就是來一次運用前面的所學!&lt;/p&gt;
&lt;h2 id=&#34;資料標註-用-opencv-來製作一個標記點小工具吧&#34;&gt;(資料標註) 用 OpenCV 來製作一個標記點小工具吧!&lt;/h2&gt;
&lt;p&gt;我們要製作一個標記點小工具，大致要完成三個功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主程式 (讀取圖片)&lt;/li&gt;
&lt;li&gt;控制滑鼠相關的函數 (滑鼠處理)&lt;/li&gt;
&lt;li&gt;依據滑鼠回傳的數值做出對應的反應函數 (主要功能處理)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;主程式-讀取圖片&#34;&gt;主程式 (讀取圖片)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img_dst&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;./testdata/cat.jpg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Click on the screen and press any key for end process&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img_dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這部分就單純的讀取圖片，&lt;br&gt;
我們使用我們定義的 「get_points」 來呼叫我們主要的功能。&lt;/p&gt;
&lt;h3 id=&#34;控制滑鼠相關的函數-滑鼠處理&#34;&gt;控制滑鼠相關的函數 (滑鼠處理)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;mouse_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;event&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EVENT_LBUTTONDOWN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 標記點位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 改變顯示 window 的內容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 顯示 (x,y) 並儲存到 list中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;get points: (x, y) = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們先定義一個控制滑鼠的函數，&lt;br&gt;
「OpenCV」 有內建滑鼠偵測的函數 「cv2.EVENT_LBUTTONDOWN」，&lt;br&gt;
為了讓我們的功能更有回饋感，我們在點擊之處新增一個紅點，&lt;br&gt;
作為我們真的有點下去的視覺上回饋，&lt;br&gt;
我們在畫點之後更新畫面，即時顯示在畫面上，&lt;br&gt;
並將這些點儲存起來，供等等分析使用。&lt;br&gt;
&lt;/p&gt;
&lt;h3 id=&#34;依據滑鼠回傳的數值做出對應的反應函數-主要功能處理&#34;&gt;依據滑鼠回傳的數值做出對應的反應函數 (主要功能處理)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;im&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 建立 data dict, img:存放圖片, points:存放點&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;im&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 建立一個 window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namedWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 改變 window 成為適當圖片大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;im&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Img height, width: (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resizeWindow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顯示圖片在 window 中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;im&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 利用滑鼠回傳值，資料皆保存於 data dict中&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setMouseCallback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mouse_handler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 等待按下任意鍵，藉由 OpenCV 內建函數釋放資源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 回傳點 list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;points&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這裡就是我們的主要功能區，&lt;br&gt;
我們先建立一個 data dictionary，&lt;br&gt;
將我們的圖片儲存在 「data[&amp;lsquo;img&amp;rsquo;]」 這個欄位，&lt;br&gt;
並宣告一個 「data[&amp;lsquo;points&amp;rsquo;]」 讓我們等等來儲存點。&lt;/p&gt;
&lt;p&gt;我們建立一個新的作業用視窗 「cv2.namedWindow」，&lt;br&gt;
並修改為符合圖片大小 「cv2.resizeWindow」，&lt;br&gt;
最後顯示圖片在視窗中 「cv2.imshow」。&lt;/p&gt;
&lt;p&gt;「cv2.setMouseCallback(&amp;ldquo;Image&amp;rdquo;, mouse_handler, data)」，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第二個參數就是我們剛剛定義滑鼠功能的函數名字，&lt;/li&gt;
&lt;li&gt;第三個參數我們傳入 data dictionary，讀取圖片並儲存點座標。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;為求程式的穩定性，我們使用 OpenCV 的內建函數來釋放資源&lt;br&gt;
「cv2.waitKey(0)」，&lt;code&gt;cv2.destroyAllWindows()&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;最後我們回傳點座標「return data[&amp;lsquo;points&amp;rsquo;]」，&lt;br&gt;
完成我們這次的功能。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248830&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 23 - 綜合運用2，(資料標註) 用 OpenCV 來製作一個標記點小工具吧! 滑鼠與視窗控制 label points&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/143035374&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/143035374&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/code/3oqxejy.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/code/3oqxejy.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/fanjiule/article/details/81606596&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/fanjiule/article/details/81606596&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/yefcion/article/details/79435591&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/yefcion/article/details/79435591&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 865
Post Date: 2020-10-05 01:51:05
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-merge-two-images/</link>
        <pubDate>Sun, 04 Oct 2020 01:49:08 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-merge-two-images/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424YpE8BgoZDY.png" alt="Featured image of post 【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424p2RmQg7Qld.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424p2RmQg7Qld.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424p2RmQg7Qld_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424p2RmQg7Qld_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day22_p%E5%9C%96_merge_two_images.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day22_p圖_merge_two_images.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們該來運用之前學過的所有東西了!&lt;br&gt;
綜合運用篇就是來一次運用前面的所學!&lt;/p&gt;
&lt;h2 id=&#34;用-opencv-來p圖囉&#34;&gt;用 OpenCV 來P圖囉!&lt;/h2&gt;
&lt;p&gt;我們準備了之前的貓貓(img1):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424QI6HOGR43O.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424QI6HOGR43O.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424QI6HOGR43O_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424QI6HOGR43O_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;p&gt;以及迷你版的我本人(img2):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424yk6aDp2Xqn.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424yk6aDp2Xqn.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424yk6aDp2Xqn_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424yk6aDp2Xqn_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;p&gt;來練習把我P到貓貓圖上面吧!&lt;/p&gt;
&lt;h3 id=&#34;這裡我們先提供大家等等步驟的思路&#34;&gt;這裡我們先提供大家等等步驟的思路&lt;/h3&gt;
&lt;ol&gt;
- 將要P的圖，改成適當大小 (「cv2.resize」)
- 將要P的圖，使用漫水填充法，濾出背景 (「cv2.floodFill」)
- 將濾出背景的圖，挖出人物，取得遮罩(黑色) (「cv2.cvtColor, cv2.threshold」)
- 將遮罩印在原來的圖片上，有點像挖空的感覺 (「cv2.bitwise_and」)
- 挖空後，反向取得原先要P圖的人物 (「cv2.bitwise_not, cv2.bitwise_and」)
- 合併人物至原來的圖片 (「cv2.add」)
&lt;/ol&gt;
&lt;h3 id=&#34;將要p的圖改成適當大小-cv2resize&#34;&gt;將要P的圖，改成適當大小 (「cv2.resize」)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;resize_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scale_percent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scale_percent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 縮放後圖片寬度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scale_percent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 縮放後圖片高度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 圖片形狀 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;resize_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;interpolation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INTER_AREA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resize_img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因為原來的我圖片太大了，我們先將這張圖片縮小25%。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/201204246Z83bkEWc8.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/201204246Z83bkEWc8.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/201204246Z83bkEWc8_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/201204246Z83bkEWc8_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;將要p的圖使用漫水填充法濾出背景-cv2floodfill&#34;&gt;將要P的圖，使用漫水填充法，濾出背景 (「cv2.floodFill」)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;copyIma&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;floodFill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copyIma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLOODFILL_FIXED_RANGE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這部分的內容可以參考昨天我所寫的：&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248266&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 21 - 花式修圖3，OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424ujwiG5m0Yd.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424ujwiG5m0Yd.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424ujwiG5m0Yd_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424ujwiG5m0Yd_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;將濾出背景的圖挖出人物取得遮罩黑色-cv2cvtcolor-cv2threshold&#34;&gt;將濾出背景的圖，挖出人物，取得遮罩(黑色) (「cv2.cvtColor, cv2.threshold」)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img2gray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copyIma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img2gray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;254&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;取得上面的漫水填充法結果圖後，我們一樣先轉成灰階，&lt;br&gt;
由於剛剛我們使用 (255, 255, 255) 來填充背景部分，&lt;br&gt;
我們設定閥值(threshold)為 254，濾出背景。&lt;/p&gt;
&lt;p&gt;最後我們要取得遮罩，等等要拿來挖空原圖，&lt;br&gt;
遮罩有點類似就是要挖空的形狀，所以我們把挖空的地方填成黑色。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424bcs6sVih0Z.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424bcs6sVih0Z.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424bcs6sVih0Z_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424bcs6sVih0Z_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;將遮罩印在原來的圖片上有點像挖空的感覺-cv2bitwise_and&#34;&gt;將遮罩印在原來的圖片上，有點像挖空的感覺 (「cv2.bitwise_and」)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cols&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;channels&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;170&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cols&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Use mask to crop origin image1:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img1_bg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_and&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們先透過 roi 設定好我們想p圖的位置，&lt;br&gt;
之後直接把這區域先取出來，然後使用 「cv2.bitwise_and」 直接進行挖空，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;因為mask黑色部分是0，只要and之後都會是黑，&lt;/li&gt;
&lt;li&gt;而白色部分是255，只要and之後都會保持原樣。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424gk6KL9sZNC.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424gk6KL9sZNC.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424gk6KL9sZNC_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424gk6KL9sZNC_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;挖空後反向操作取得原先要p圖的人物-cv2bitwise_not-cv2bitwise_and&#34;&gt;挖空後，反向操作取得原先要P圖的人物 (「cv2.bitwise_not, cv2.bitwise_and」)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mask_inv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_not&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img2_fg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_and&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask_inv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;現在換我們來 「cv2.bitwise_and」 要p的圖片，&lt;br&gt;
我們先將原來的mask運用 「cv2.bitwise_not」，取得反向的mask，&lt;br&gt;
變成這個mask專門來幫助我們挖掉背景。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;因為mask黑色部分(現在是背景)是0，只要and之後都會是黑，&lt;/li&gt;
&lt;li&gt;而白色部分是255(現在是人)，只要and之後都會保持原樣。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424p6SxXDnTVo.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424p6SxXDnTVo.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424p6SxXDnTVo_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424p6SxXDnTVo_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424Gcb8p4oh5O.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424Gcb8p4oh5O.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424Gcb8p4oh5O_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424Gcb8p4oh5O_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;合併人物至原來的圖片-cv2add&#34;&gt;合併人物至原來的圖片 (「cv2.add」)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img1_bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img2_fg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cols&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;剛剛在步驟4，我們已經把原圖要p的地方挖空(=0)&lt;br&gt;
剛剛在步驟5，我們已經把要p的地方取出(有乾淨的值)，其他背景(=0)&lt;br&gt;
我們只需要將這兩個單純相加 (=0的地方已經不構成影響)，&lt;br&gt;
即可以得到乾淨的合成圖片。&lt;/p&gt;
&lt;p&gt;我們使用 「cv2.add」。&lt;br&gt;
最後只要合併結果至原圖，p圖就完成囉!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424YpE8BgoZDY.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424YpE8BgoZDY.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424YpE8BgoZDY_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424YpE8BgoZDY_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248721&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 22 - 綜合運用1，用 OpenCV 來P圖囉! 來運用各種之前學習的各種東西吧! merge two images&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10236235&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 3 - 基本修圖2，OpenCV 圖片的剪裁、旋轉、縮放 (crop, rotate, resize)，在 jupyter 中直接找尋圖片的座標&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10244900&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 15 - 進階修圖2，OpenCV 當然也有像 ps 圖層的功能! 什麼？圖片也能加減法?! Add, Subtract, AddWeighted&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10246072&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 17 - 進階修圖4，運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10246927&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 18 - 進階修圖5，運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248266&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 21 - 花式修圖3，OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.opencv.org/master/d0/d86/tutorial_py_image_arithmetics.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.opencv.org/master/d0/d86/tutorial_py_image_arithmetics.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 857
Post Date: 2020-10-04 01:49:08
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-floodfill/</link>
        <pubDate>Sat, 03 Oct 2020 01:46:25 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-floodfill/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424OhfpvRXI1Z.png" alt="Featured image of post 【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424hmhfl6eFFu.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424hmhfl6eFFu.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424hmhfl6eFFu_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424hmhfl6eFFu_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day21_%E9%AD%94%E8%A1%93%E6%A3%92%E5%B7%A5%E5%85%B7_magic_wand_tool.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day21_魔術棒工具_magic_wand_tool.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;花式修圖的這個系列&amp;hellip;&lt;br&gt;
主要會講的是一些比進階再更進階的內容，&lt;br&gt;
會有比較多冷門的功能，或是更難的演算法。&lt;/p&gt;
&lt;h2 id=&#34;opencv-也有-photoshop-的魔術棒工具&#34;&gt;OpenCV 也有 photoshop 的魔術棒工具?!&lt;/h2&gt;
&lt;p&gt;今天要來介紹的是 OpenCV 中類似 photoshop 魔術棒工具的函數，&lt;br&gt;
我們稱之為「漫水填充法」 「cv2.floodFill」&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;floodfill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loDiff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;upDiff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;copyimg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;floodFill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copyimg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;upDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;upDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLOODFILL_FIXED_RANGE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;他的原理是從一個點的資訊出發，我們開始尋找鄰近點是否有與他相似的值，&lt;br&gt;
如果有，則填充一樣的顏色，最後我們可以再利用此顏色進行其他修圖。&lt;/p&gt;
&lt;h3 id=&#34;cv2floodfill-的函數定義&#34;&gt;「cv2.floodFill」 的函數定義&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;floodFill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seedPoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;newVal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;upDiff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;image: 你的圖&lt;/li&gt;
&lt;li&gt;mask: 遮罩，預設為「原圖的大小長寬各+2」&lt;/li&gt;
&lt;li&gt;seedPoint: 種子點 (顏色對照點)&lt;/li&gt;
&lt;li&gt;newVal: 要填充的顏色&lt;/li&gt;
&lt;li&gt;loDiff: 與種子點顏色之「負向顏色差距最大值」&lt;/li&gt;
&lt;li&gt;upDiff: 與種子點顏色之「正向顏色差距最大值」&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;flags: 可以分為
&lt;ul&gt;
&lt;li&gt;「FLOODFILL_MASK_ONLY」: 設定則表示不改變原始圖片(等於忽略newVal的值)，結果會改變在mask裡面&lt;/li&gt;
&lt;li&gt;「FLOODFILL_FIXED_RANGE」: 設定這個表示考慮當前像素與種子點的差，沒有則代表都與鄰近的比&lt;/li&gt;
&lt;li&gt;以上兩個參數可以用 or 相連表示同時使用: 即 「FLOODFILL_MASK_ONLY | FLOODFILL_FIXED_RANGE」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;h2 id=&#34;漫水填充法-cv2floodfill實作&#34;&gt;「漫水填充法」 「cv2.floodFill」實作&lt;/h2&gt;
&lt;p&gt;又要來借用我自己的照片當示範一下啦&amp;hellip;&lt;/p&gt;
&lt;h3 id=&#34;原圖&#34;&gt;原圖&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424I8h5HiKBhH.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424I8h5HiKBhH.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424I8h5HiKBhH_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424I8h5HiKBhH_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;填充後此處用黃色來凸顯效果&#34;&gt;填充後(此處用黃色來凸顯效果)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/201204242WAh3Wqxmk.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/201204242WAh3Wqxmk.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/201204242WAh3Wqxmk_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/201204242WAh3Wqxmk_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;當然這參數我有調過，實際上使用也需要自行調整參數以達到最佳效果。&lt;/p&gt;
&lt;h3 id=&#34;用二值化濾出人物&#34;&gt;用二值化濾出人物&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img2gray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copyimg2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img2gray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424Weo97Wq1kJ.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424Weo97Wq1kJ.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424Weo97Wq1kJ_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424Weo97Wq1kJ_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/2012042411NaUUT8RA.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/2012042411NaUUT8RA.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/2012042411NaUUT8RA_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/2012042411NaUUT8RA_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;其實操作很簡單，一開始填充值都設 「黑色(0,0,0)」，&lt;br&gt;
在二值化時，只需要將「閥值設1 (1&amp;gt;0)」 即可得到過濾出人物。&lt;/p&gt;
&lt;h3 id=&#34;手動去掉不要的部分&#34;&gt;手動去掉不要的部分&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;550&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;950&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# roi_y, roi_x&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;254&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mask2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;550&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;950&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;roi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424TuAHYuFMEa.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424TuAHYuFMEa.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424TuAHYuFMEa_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424TuAHYuFMEa_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;這部分沒辦法，就算用 photoshop 的魔術棒工具也是會有不完美的部分，&lt;br&gt;
我們在針對區域去掉我們不要的地方。&lt;/p&gt;
&lt;h3 id=&#34;得到最後乾淨的人物遮罩圖片&#34;&gt;得到最後乾淨的人物遮罩圖片&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mask_inv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_not&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mask2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424OhfpvRXI1Z.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424OhfpvRXI1Z.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424OhfpvRXI1Z_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424OhfpvRXI1Z_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】21 - OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;運用之前 「cv2.bitwise_not」的技巧，&lt;br&gt;
快速得到我們人物的遮罩。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10248266&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 21 - 花式修圖3，OpenCV 也有 photoshop 的魔術棒工具?! 漫水填充法 cv2.floodFill (Magic Wand Tool)&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/youmuchen/p/7450049.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.cnblogs.com/youmuchen/p/7450049.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.opencv.org/master/d0/d86/tutorial_py_image_arithmetics.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.opencv.org/master/d0/d86/tutorial_py_image_arithmetics.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/weixin_42508025/article/details/84029054?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/weixin_42508025/article/details/84029054?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/E01114255/article/details/76186656?utm_source=blogxgwz4&amp;amp;utm_medium=distribute.pc_relevant.none-task-blog-title-9&amp;amp;spm=1001.2101.3001.4242&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/E01114255/article/details/76186656?utm_source=blogxgwz4&amp;utm_medium=distribute.pc_relevant.none-task-blog-title-9&amp;spm=1001.2101.3001.4242&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itread01.com/content/1537189082.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itread01.com/content/1537189082.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 854
Post Date: 2020-10-03 01:46:25
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-threshold-all-otsu/</link>
        <pubDate>Fri, 02 Oct 2020 01:36:17 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-threshold-all-otsu/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424XkCXmAKvOM.png" alt="Featured image of post 【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;h3 id=&#34;比較-opencv-的不同-threshold算法&#34;&gt;比較 OpenCV 的不同 「Threshold算法」&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424a2T8zN6oum.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424a2T8zN6oum.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424a2T8zN6oum_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424a2T8zN6oum_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&amp;#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;otsus-threshold-大津二值化&#34;&gt;「Otsu&amp;rsquo;s Threshold 大津二值化」&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/201204246CI3LLnL4R.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/201204246CI3LLnL4R.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/201204246CI3LLnL4R_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/201204246CI3LLnL4R_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&amp;#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day20-1_%E5%A4%A7%E6%B4%A5%E4%BA%8C%E5%80%BC%E5%8C%96_Otsu_threshold.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day20-1_大津二值化_Otsu_threshold.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day20-2_%E4%BA%8C%E5%80%BC%E5%8C%96%E5%A4%A7%E5%85%A8_Threshold_collection.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day20-2_二值化大全_Threshold_collection.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;花式修圖的這個系列&amp;hellip;&lt;br&gt;
主要會講的是一些比進階再更進階的內容，&lt;br&gt;
會有比較多冷門的功能，或是更難的演算法。&lt;/p&gt;
&lt;h2 id=&#34;otsus-threshold-大津二值化-是什麼&#34;&gt;「Otsu&amp;rsquo;s Threshold 大津二值化」 是什麼&lt;/h2&gt;
&lt;p&gt;「Otsu&amp;rsquo;s Threshold 大津二值化」，他用來幫助我們解決「手動設定閥值的選值困擾」，&lt;br&gt;
我們透過 「Otsu&amp;rsquo;s Threshold」 演算法，能夠「自動找出最佳的閥值」。&lt;/p&gt;
&lt;p&gt;圖片示例：&lt;br&gt;
(引用自：https://scikit-image.org/docs/0.13.x/auto_examples/xx_applications/plot_thresholding.html)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/201204249fg93JNiXe.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/201204249fg93JNiXe.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/201204249fg93JNiXe_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/201204249fg93JNiXe_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&amp;#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！&#34;  &gt;&lt;/p&gt;
&lt;p&gt;參考右下角的圖片，我們自動找到了最佳閥值後，再進行二值化。&lt;/p&gt;
&lt;h3 id=&#34;otsus-threshold-大津二值化自動計算最佳閥值&#34;&gt;「Otsu&amp;rsquo;s Threshold 大津二值化」，自動計算最佳閥值&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 先將圖片轉為灰階&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# global thresholding&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;th1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Otsu&amp;#39;s thresholding&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;th2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_OTSU&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Otsu&amp;#39;s thresholding after Gaussian filtering&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;blur&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GaussianBlur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;th3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_OTSU&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們看一下效果：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424UC53vugIHo.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424UC53vugIHo.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424UC53vugIHo_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424UC53vugIHo_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&amp;#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！&#34;  &gt;&lt;/p&gt;
&lt;p&gt;我們可以發現在未做 「Otsu&amp;rsquo;s Threshold」 的 histogram 中，&lt;br&gt;
「「0的比例」」遠遠比有做 「Otsu&amp;rsquo;s Threshold」 還高，&lt;br&gt;
從結果圖中我們也能發現這點，&lt;br&gt;
如果我們只是單純要「提取人像」，&lt;br&gt;
很明顯地透過 「Otsu&amp;rsquo;s Threshold」 給了我們一個更好的答案。&lt;/p&gt;
&lt;h3 id=&#34;otsus-threshold-的算法&#34;&gt;「Otsu&amp;rsquo;s Threshold」 的算法&lt;/h3&gt;
&lt;p&gt;重點程式碼也是一行，而有時我們也會先搭配模糊的方法先進行降噪。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;th&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_OTSU&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;比較-opencv-的各種-threshold算法&#34;&gt;比較 OpenCV 的各種 「Threshold算法」&lt;/h2&gt;
&lt;p&gt;這裡就是這幾天文章的總整理啦~~~&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10246927&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 18 - 進階修圖5，運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10247621&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 19 - 花式修圖1，OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！cv2.adaptiveThreshold&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10247721&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 20 - 花式修圖2，OpenCV 的 Threshold 方法整理，Otsu&amp;rsquo;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖片！&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;結果總圖： 大家可以自己比較不同 「Threshold算法」，選出自己最喜歡的效果哦！&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424XkCXmAKvOM.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424XkCXmAKvOM.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424XkCXmAKvOM_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424XkCXmAKvOM_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】20 - OpenCV 的各種 Threshold 方法整理，Otsu&amp;#39;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10247721&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 20 - 花式修圖2，OpenCV 的各種 Threshold 方法整理，Otsu&amp;rsquo;s Threshold 大津二值化，自動計算最佳閥值，做出最好的黑白效果圖！&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/%E5%A4%A7%E6%B4%A5%E7%AE%97%E6%B3%95&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zh.wikipedia.org/wiki/%E5%A4%A7%E6%B4%A5%E7%AE%97%E6%B3%95&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://scipy-lectures.org/packages/scikit-image/auto_examples/plot_threshold.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://scipy-lectures.org/packages/scikit-image/auto_examples/plot_threshold.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Global_Thresholding_Adaptive_Thresholding_Otsus_Binarization_Segmentations.php&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Global_Thresholding_Adaptive_Thresholding_Otsus_Binarization_Segmentations.php&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://gwang-cv.github.io/2017/08/25/python&amp;#43;opencv%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%96/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://gwang-cv.github.io/2017/08/25/python+opencv%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%96/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://scikit-image.org/docs/0.13.x/auto_examples/xx_applications/plot_thresholding.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://scikit-image.org/docs/0.13.x/auto_examples/xx_applications/plot_thresholding.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 842
Post Date: 2020-10-02 01:36:17
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】19 - OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！cv2.adaptiveThreshold</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-adaptivethreshold/</link>
        <pubDate>Thu, 01 Oct 2020 01:33:34 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-adaptivethreshold/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/10/20120424dceOKY04nL.png" alt="Featured image of post 【OpenCV】19 - OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！cv2.adaptiveThreshold" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424wyFAcdXy4Z.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424wyFAcdXy4Z.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424wyFAcdXy4Z_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424wyFAcdXy4Z_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】19 - OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！cv2.adaptiveThreshold&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day19_%E8%87%AA%E9%81%A9%E6%87%89%E5%9C%96%E7%89%87%E4%BA%8C%E5%80%BC%E5%8C%96_adaptiveThreshold.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day19_自適應圖片二值化_adaptiveThreshold.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;花式修圖的這個系列&amp;hellip;&lt;br&gt;
主要會講的是一些比進階再更進階的內容，&lt;br&gt;
會有比較多冷門的功能，或是更難的演算法。&lt;/p&gt;
&lt;h2 id=&#34;opencv-的圖片自適應二值化產生更好效果的黑白圖片&#34;&gt;OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 先將圖片轉為灰階&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將圖片做模糊化，可以降噪&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;blur_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;medianBlur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 一般圖二值化(未模糊降噪)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;th1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 一般圖自適應平均二值化(未模糊降噪)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;th2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adaptiveThreshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ADAPTIVE_THRESH_MEAN_C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 一般圖自適應高斯二值化(未模糊降噪)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;th3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adaptiveThreshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ADAPTIVE_THRESH_GAUSSIAN_C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 一般圖二值化(有模糊降噪)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;th4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blur_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 一般圖算術平均法的自適應二值化(有模糊降噪)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;th5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adaptiveThreshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blur_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ADAPTIVE_THRESH_MEAN_C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 一般圖高斯加權均值法自適應二值化(有模糊降噪)      &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;th6&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adaptiveThreshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blur_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ADAPTIVE_THRESH_GAUSSIAN_C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;什麼是-自適應二值化&#34;&gt;什麼是 「自適應二值化」&lt;/h3&gt;
&lt;p&gt;我們先來討論什麼是 「自適應的二值化」，&lt;br&gt;
一般的 「二值化」 我們只會考慮單一點的值，直接去做閥值分析，&lt;br&gt;
但一張圖片的「每個鄰近的像素都是彼此有關連的」。&lt;/p&gt;
&lt;p&gt;如果單純只針對單一個點去看，似乎失去了對整張圖相鄰點的考慮，&lt;br&gt;
因此 「自適應二值化」 就是在幫助我們找到單一點與鄰近區域的關係。&lt;/p&gt;
&lt;h3 id=&#34;自適應二值化的算法&#34;&gt;「自適應二值化」的算法&lt;/h3&gt;
&lt;p&gt;「cv2.adaptiveThreshold」 能夠幫助我們將一張圖片做自適應的二值化，&lt;br&gt;
自適應的二值化又分為&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;算術平均法的自適應二值化: 「cv2.ADAPTIVE_THRESH_MEAN_C」，取的是「區域平均值」&lt;/li&gt;
&lt;li&gt;高斯加權均值法自適應二值化: 「cv2.ADAPTIVE_THRESH_GAUSSIAN_C」，&lt;br&gt;
取的是「高斯平均值」(高斯分佈)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cv2adaptivethreshold-函數形式&#34;&gt;「cv2.adaptiveThreshold」 函數形式&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adaptiveThreshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;自適應二值化算法&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;閥值類型&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;參考局部大小&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;偏移量&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;image: 輸入圖片&lt;/li&gt;
&lt;li&gt;自適應二值化算法: 可使用 「cv2.ADAPTIVE_THRESH_MEAN_C」 和 「cv2.ADAPTIVE_THRESH_GAUSSIAN_C」&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;閥值類型: 可使用 「THRESH_BINARY」 和 「THRESH_BINARY_INV」，
看是超過閥值要「黑白」還是「白黑」。&lt;/li&gt;
- 參考局部大小: 就是參考區域的大小
- 偏移量: 微調用的參數
&lt;h3 id=&#34;自適應二值化-搭配模糊降噪能有更好的效果&#34;&gt;「自適應二值化」 搭配模糊降噪，能有更好的效果&lt;/h3&gt;
&lt;p&gt;通常在做 「自適應二值化」 之前，我們都會先將圖片做模糊化，&lt;br&gt;
能夠達到降噪的效果，看下圖結果的圖片應該能很明顯地分得出差別。&lt;/p&gt;
&lt;p&gt;(文章內容中，我們使用 「cv2.medianBlur」 來做模糊降噪的示範。)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424dceOKY04nL.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/10/20120424dceOKY04nL.webp 1600w, https://wongwongnotes.com/images/restored/2020/10/20120424dceOKY04nL_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/10/20120424dceOKY04nL_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】19 - OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！cv2.adaptiveThreshold&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10247621&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 19 - 花式修圖1，OpenCV 的圖片自適應二值化，產生更好效果的黑白圖片！cv2.adaptiveThreshold&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/on2way/article/details/46812121&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/on2way/article/details/46812121&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/weixin_40647819/article/details/90213858?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/weixin_40647819/article/details/90213858?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/qq_37385726/article/details/82017177&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/qq_37385726/article/details/82017177&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.twblogs.net/a/5b8c1ba02b717718833082e1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.twblogs.net/a/5b8c1ba02b717718833082e1&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 838
Post Date: 2020-10-01 01:33:34
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】18 - 運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-threshold/</link>
        <pubDate>Wed, 30 Sep 2020 01:31:11 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-threshold/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424qIN5Byvvu5.png" alt="Featured image of post 【OpenCV】18 - 運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204240MIJZKIKDb.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204240MIJZKIKDb.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204240MIJZKIKDb_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204240MIJZKIKDb_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】18 - 運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day18_%E5%9C%96%E7%89%87%E4%BA%8C%E5%80%BC%E5%8C%96_threshold.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day18_圖片二值化_threshold.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;基本修圖技能學習完之後，&lt;br&gt;
再來我們要來學一些比較進階會使用的修圖技巧囉！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-做圖片二值化產生黑白的圖片&#34;&gt;運用 OpenCV 做圖片二值化，產生黑白的圖片&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 先將圖片轉為灰階&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將小於閾值的灰度值設為0，其他值設為最大灰度值。&amp;gt;127 =255, &amp;lt;127 =0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將大於閾值的灰度值設為0，其他值設為最大灰度值。&amp;gt;127 =0, &amp;lt;127 =255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_BINARY_INV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將大於閾值的灰度值設為閾值，小於閾值的值保持不變。 &amp;gt;127 =127&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_TRUNC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將小於閾值的灰度值設為0，大於閾值的值保持不變。 &amp;lt;127 =0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_TOZERO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 將大於閾值的灰度值設為0，小於閾值的值保持不變。 &amp;gt;127 =0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thresh5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;127&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;THRESH_TOZERO_INV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;「cv2.threshold」 最主要的功能是能夠幫助我們將一張圖片做二值化，&lt;br&gt;
二值化的意思是「圖片只會剩下兩個值」，通常是「黑(255)與白(0)」。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;閥值&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;最大灰度值&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;使用的二值化方法&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下圖我們可以參考使用不同的「使用的二值化方法」跑出來的結果。&lt;br&gt;
(假設「閥值=127、最大灰度值=255」)&lt;/p&gt;
&lt;li&gt;cv2.THRESH_BINARY
&lt;ul&gt;
&lt;li&gt;將小於閾值的灰度值設為0，其他值設為最大灰度值。&lt;/li&gt;
&lt;li&gt;白話文：「&amp;gt;127 =255, &amp;lt;127 =0」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cv2.THRESH_BINARY_INV
&lt;ul&gt;
&lt;li&gt;將大於閾值的灰度值設為0，其他值設為最大灰度值。&lt;/li&gt;
&lt;li&gt;白話文：「&amp;gt;127 =0, &amp;lt;127 =255」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cv2.THRESH_TRUNC
&lt;ul&gt;
&lt;li&gt;將大於閾值的灰度值設為閾值，小於閾值的值保持不變。&lt;/li&gt;
&lt;li&gt;白話文：「&amp;gt;127 =127」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cv2.THRESH_TOZERO
&lt;ul&gt;
&lt;li&gt;將小於閾值的灰度值設為0，大於閾值的值保持不變。&lt;/li&gt;
&lt;li&gt;白話文：「&amp;lt;127 =0」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cv2.THRESH_TOZERO_INV
&lt;ul&gt;
&lt;li&gt;將大於閾值的灰度值設為0，小於閾值的值保持不變。&lt;/li&gt;
&lt;li&gt;白話文：「&amp;gt;127 =0」&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424qIN5Byvvu5.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424qIN5Byvvu5.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424qIN5Byvvu5_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424qIN5Byvvu5_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】18 - 運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;為什麼我們需要做二值化呢&#34;&gt;為什麼我們需要做二值化呢?&lt;/h2&gt;
&lt;p&gt;圖片二值化後，對於整張圖片來說就是乾淨的兩個值，&lt;br&gt;
只有乾淨的兩個值，很適合我們做一些輪廓偵測的運算。&lt;/p&gt;
&lt;p&gt;而算出輪廓後我們就可以做很多圖形的處理，&lt;br&gt;
例如畫出圖片輪廓、圖片邊緣的銳利度強化、&lt;br&gt;
加粗圖片的輪廓線、依照輪廓線替圖片添加陰影&amp;hellip;&lt;/p&gt;
&lt;p&gt;因此，這是非常重要的一門技術，搭配其他功能的操作能實現非常多的效果！&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10246927&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 18 - 進階修圖5，運用 OpenCV 做圖片二值化，產生黑白的圖片吧！cv2.threshold 各種選擇參數大全&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/on2way/article/details/46812121&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/on2way/article/details/46812121&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 835
Post Date: 2020-09-30 01:31:11
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-bitwise_or-and-xor-not/</link>
        <pubDate>Tue, 29 Sep 2020 01:28:25 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-bitwise_or-and-xor-not/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424C91dP5jVHY.png" alt="Featured image of post 【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424EO1VqET8JB.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424EO1VqET8JB.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424EO1VqET8JB_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424EO1VqET8JB_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day17_%E5%9C%96%E7%89%87%E8%81%AF%E9%9B%86%E4%BA%A4%E9%9B%86%E5%B7%AE%E9%9B%86_or_and_xor_not_addWeighted.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day17_圖片聯集交集差集_or_and_xor_not_addWeighted.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;基本修圖技能學習完之後，&lt;br&gt;
再來我們要來學一些比較進階會使用的修圖技巧囉！&lt;/p&gt;
&lt;h2 id=&#34;opencv-的-終極圖層處理大全&#34;&gt;OpenCV 的 終極圖層處理大全&lt;/h2&gt;
&lt;p&gt;今天這集是之前&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10244900&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day 15 - 進階修圖2，OpenCV 當然也有像 ps 圖層的功能! 什麼？圖片也能加減法?! Add, Subtract, AddWeighted&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;的續集，我們在這篇會把所有 OpenCV 圖層的處理方式都整理起來！&lt;/p&gt;
&lt;h2 id=&#34;先來看看我們今天的兩張圖&#34;&gt;先來看看我們今天的兩張圖&lt;/h2&gt;
&lt;p&gt;我們的圖一:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424D8fsJinRNo.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424D8fsJinRNo.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424D8fsJinRNo_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424D8fsJinRNo_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;我們的圖二:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424sL4ks0o5Kl.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424sL4ks0o5Kl.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424sL4ks0o5Kl_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424sL4ks0o5Kl_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;cv2bitwise_or-圖片聯集&#34;&gt;cv2.bitwise_or 圖片聯集&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424h1WyGSBG32.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424h1WyGSBG32.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424h1WyGSBG32_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424h1WyGSBG32_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img1_img2_or&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_or&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;將兩張圖片做聯集，&lt;br&gt;
在這裡因為「白色是 (255, 255, 255)」&lt;br&gt;
「藍色是(255, 0, 0)」，聯集會留下 「白色(255, 255, 255)」&lt;/p&gt;
&lt;p&gt;(「只有要存在都保留」。)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;小提醒: 在 OpenCV 的世界中，所有顏色都是照 BGR 的順序哦 ~&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;cv2bitwise_and-圖片交集&#34;&gt;cv2.bitwise_and 圖片交集&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424KfvYpeqVM9.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424KfvYpeqVM9.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424KfvYpeqVM9_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424KfvYpeqVM9_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img1_img2_and&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_and&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;將兩張圖片做交集，&lt;br&gt;
在這裡因為「白色是 (255, 255, 255)」&lt;br&gt;
「藍色是(255, 0, 0)」，交集會留下 「藍色(255, 0, 0)」&lt;/p&gt;
&lt;p&gt;(「一個不存在就不留」。)&lt;/p&gt;
&lt;h2 id=&#34;cv2bitwise_xor-圖片互斥或&#34;&gt;cv2.bitwise_xor 圖片互斥或&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424ge2kdjFcyz.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424ge2kdjFcyz.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424ge2kdjFcyz_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424ge2kdjFcyz_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img1_img2_xor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_xor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;將兩張圖片做互斥或，&lt;br&gt;
在這裡因為「白色是 (255, 255, 255)」&lt;br&gt;
「藍色是(255, 0, 0)」，互斥或會留下 「黃色(0, 255, 255)」&lt;/p&gt;
&lt;p&gt;(「兩個都存在就不留」，「一個存在就留」。)&lt;/p&gt;
&lt;h2 id=&#34;cv2bitwise_not-圖片非運算&#34;&gt;cv2.bitwise_not 圖片非運算&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424C91dP5jVHY.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424C91dP5jVHY.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424C91dP5jVHY_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424C91dP5jVHY_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】17 - 運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&#34;  &gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img1_not&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitwise_not&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;將一張圖片做非運算，&lt;br&gt;
在這裡因為「白色是 (255, 255, 255)」&lt;br&gt;
非運算會留下 「黑色(0, 0, 0)」。&lt;/p&gt;
&lt;p&gt;反過來說，原本黑色的地方，&lt;br&gt;
經過圖片非運算，會變成白色。&lt;/p&gt;
&lt;h2 id=&#34;實際的運用&#34;&gt;實際的運用&lt;/h2&gt;
&lt;p&gt;運用其實有很多東西能寫&amp;hellip; 但今天的版面已經很多內容了，&lt;br&gt;
決定合併到之後的內容再寫。&lt;/p&gt;
&lt;h3 id=&#34;p圖的問題&#34;&gt;P圖的問題?&lt;/h3&gt;
&lt;p&gt;但這裡先給些提示，我們如果真的要實現把一個人P到另外一張圖，&lt;br&gt;
我們直接用 「addWeighted」 是行不通的，&lt;br&gt;
因為 「addWeighted」 只有調整透明度後貼上去，&lt;br&gt;
因此貼上去的圖片「原本的背景一定還在」。&lt;/p&gt;
&lt;h3 id=&#34;那想p圖應該怎麼做呢&#34;&gt;那想P圖應該怎麼做呢?&lt;/h3&gt;
&lt;ol&gt;
- 先將圖片做二值化(之後的內容會提到，簡單來說將圖片變為黑白色)。
- 把要挖掉的地方先用成黑色，可能會用到 「cv2.bitwise_not」
- 使用 「cv2.bitwise_and」 挖掉該區域 (因為「黑色=0」全挖空，「白色=255」全保留)
- 用 「cv2.add」 將圖片貼上該空白(被挖掉的)區域 (因為「黑色=0」，相加沒影響)
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;可以去想想看上面P圖過程其中的奧秘哦！&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10246072&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 17 - 進階修圖4，運用 OpenCV 的終極圖層處理大全, 想P圖該怎麼P (bitwise_or, and, xor, not, addWeighted)&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/JNingWei/article/details/78241973&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/JNingWei/article/details/78241973&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/qq_41895190/article/details/82905657&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/qq_41895190/article/details/82905657&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://medium.com/%E4%B8%80%E5%80%8B%E4%BA%BA%E7%9A%84%E6%96%87%E8%97%9D%E5%BE%A9%E8%88%88/boolean%E5%9C%96%E5%BD%A2%E6%8E%A7%E5%88%B6%E5%B0%8F%E9%81%8A%E6%88%B2-f5bb22a1e1c2&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://medium.com/%E4%B8%80%E5%80%8B%E4%BA%BA%E7%9A%84%E6%96%87%E8%97%9D%E5%BE%A9%E8%88%88/boolean%E5%9C%96%E5%BD%A2%E6%8E%A7%E5%88%B6%E5%B0%8F%E9%81%8A%E6%88%B2-f5bb22a1e1c2&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/jnulzl/article/details/47129887&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/jnulzl/article/details/47129887&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/u011028345/article/details/77278467&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/u011028345/article/details/77278467&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 801
Post Date: 2020-09-29 01:28:25
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-gaussianblur-canny/</link>
        <pubDate>Mon, 28 Sep 2020 01:16:58 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-gaussianblur-canny/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424LRj9POfSyG.png" alt="Featured image of post 【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424KzJbqNKdH1.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424KzJbqNKdH1.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424KzJbqNKdH1_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424KzJbqNKdH1_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;p&gt;還是請我們的貓貓助教來幫忙XDDDD&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day16_%E9%AB%98%E6%96%AF%E6%A8%A1%E7%B3%8A%E6%89%BE%E8%BC%AA%E5%BB%93_GaussianBlur_Canny.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day16_高斯模糊找輪廓_GaussianBlur_Canny.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;基本修圖技能學習完之後，&lt;br&gt;
再來我們要來學一些比較進階會使用的修圖技巧囉！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-幫助我們找圖片的輪廓高斯模糊canny&#34;&gt;運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny)&lt;/h2&gt;
&lt;p&gt;今天我們會來測試兩張圖片！&lt;br&gt;
首先我們先建立比較好理解的較簡單圖片。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;origin picture:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其實上面的程式幾乎都只是在為這張範例圖片畫圓而已&amp;hellip;&lt;br&gt;
不用想得太複雜哈哈哈哈&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424UtvabrTXC7.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424UtvabrTXC7.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424UtvabrTXC7_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424UtvabrTXC7_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;第一步---轉成灰階&#34;&gt;第一步 - 轉成灰階&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;gray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2GRAY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# start from BGR -&amp;gt; gray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因為彩色的圖片有三個顏色通道需要處理，&lt;br&gt;
但我們今天只需要找到輪廓，用一個通道即可，&lt;br&gt;
這樣能使得我們在運算上不會到太複雜，&lt;br&gt;
因此我們會先將圖片轉成灰階。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424a0UA8FTSRk.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424a0UA8FTSRk.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424a0UA8FTSRk_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424a0UA8FTSRk_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;第二步---opencv-的高斯模糊&#34;&gt;第二步 - OpenCV 的高斯模糊&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 高斯模糊(高斯平滑)，與計算核心大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;do_GaussianBlur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;kernel_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;blur_gray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GaussianBlur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kernel_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;blur_gray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;高斯模糊(又稱高斯平滑)，正如他的名字，就是我們將圖片模糊化，&lt;br&gt;
「kernel_size」 是我們進行運算時，對於多大範圍的圖片進行運算。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;簡單可以理解為：我們如果對 5x5 的 「kernel_size」 運算，&lt;br&gt;
那圖片每一個 5x5 的中心受到高斯模糊的影響會最大&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;算出來就會是一張比較模糊的圖片。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424kxyGXTYWeG.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424kxyGXTYWeG.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424kxyGXTYWeG_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424kxyGXTYWeG_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;p&gt;(看得出來有比較模糊吧哈哈哈哈哈)&lt;/p&gt;
&lt;p&gt;Q: 為什麼要模糊?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A: 因為先做高斯模糊(或說經過高斯平滑)的圖片能夠去除很多圖片的噪聲(雜訊)，&lt;br&gt;
更容易讓我們找到更精準的輪廓。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;第三步---opencv-的-canny-邊緣檢測&#34;&gt;第三步 - OpenCV 的 Canny 邊緣檢測&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Canny邊緣運算&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;do_Canny&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blur_gray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;low_threshold&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;high_threshold&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;edges&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Canny&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blur_gray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;low_threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;high_threshold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;edges&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中有兩個參數需要自己依情況調整，&lt;br&gt;
我們知道灰階圖片的值介於 「0~255」 之間，&lt;br&gt;
情況有三種：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高於 「high_threshold」: 為 「strong edge」 ，我們直接保留&lt;/li&gt;
&lt;li&gt;介於 「low_threshold」 與 「high_threshold」: 為 「weak edge」 ，&lt;br&gt;
Canny會檢測 「weak edge」 是否能與 「strong edge」 相連，&lt;br&gt;
如果會相連的才會被保留。&lt;/li&gt;
&lt;li&gt;低於 「low_threshold」: 我們都不當作 edge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204241dEVjzRvPf.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204241dEVjzRvPf.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204241dEVjzRvPf_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204241dEVjzRvPf_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;真實場景運用&#34;&gt;真實場景運用&lt;/h2&gt;
&lt;p&gt;我們來看看貓貓的圖跑上面的流程會發生什麼事情~&lt;br&gt;
我們設定 「low_threshold = 10、high_threshold = 90」 的時候&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424bIPggSkngo.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424bIPggSkngo.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424bIPggSkngo_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424bIPggSkngo_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;p&gt;我們設定 「low_threshold = 1、high_threshold = 10」 的時候&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424LRj9POfSyG.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424LRj9POfSyG.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424LRj9POfSyG_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424LRj9POfSyG_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】16 - 運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&#34;  &gt;&lt;/p&gt;
&lt;p&gt;(有一種素描畫的感覺?)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「low_threshold, high_threshold」，我們會依據使用情境不同調整參數，&lt;br&gt;
達到自己需要的效果。&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10245342&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 16 - 進階修圖3，運用 OpenCV 幫助我們找圖片的輪廓(高斯模糊、Canny) cv2.GaussianBlur, cv2.Canny&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://ask.csdn.net/questions/706468&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ask.csdn.net/questions/706468&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.kancloud.cn/aollo/aolloopencv/269599&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.kancloud.cn/aollo/aolloopencv/269599&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://chtseng.wordpress.com/2016/12/05/opencv-edge-detection%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://chtseng.wordpress.com/2016/12/05/opencv-edge-detection%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://medium.com/@pomelyu5199/canny-edge-detector-%E5%AF%A6%E4%BD%9C-opencv-f7d1a0a57d19&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://medium.com/@pomelyu5199/canny-edge-detector-%E5%AF%A6%E4%BD%9C-opencv-f7d1a0a57d19&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 819
Post Date: 2020-09-28 01:16:58
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-add-subtract-addweighted/</link>
        <pubDate>Sun, 27 Sep 2020 01:13:49 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-add-subtract-addweighted/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424rhuLP8aiae.png" alt="Featured image of post 【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424x81mjY3vxd.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424x81mjY3vxd.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424x81mjY3vxd_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424x81mjY3vxd_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted&#34;  &gt;&lt;/p&gt;
&lt;p&gt;還是請我們的貓貓助教來幫忙XDDDD&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day15_%E5%9C%96%E5%B1%A4%E5%9C%96%E7%89%87%E5%8A%A0%E6%B8%9B%E6%B3%95_add_subtract_addweighted.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day15_圖層圖片加減法_add_subtract_addweighted.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;基本修圖技能學習完之後，&lt;br&gt;
再來我們要來學一些比較進階會使用的修圖技巧囉！&lt;/p&gt;
&lt;h2 id=&#34;opencv-當然也有像-ps-圖層的概念&#34;&gt;OpenCV 當然也有像 ps 圖層的概念!&lt;/h2&gt;
&lt;p&gt;我們先建立一個我們今天用來輔助說明的遮罩：&lt;br&gt;
我們將全部的值都設為128，也就是灰色的一張圖片！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Create mask:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# make all 128 channel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;full&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424tMGPbcvMt6.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424tMGPbcvMt6.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424tMGPbcvMt6_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424tMGPbcvMt6_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;opencv-的圖片加法&#34;&gt;OpenCV 的圖片加法&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;add_result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;很好理解，就是一個簡單的加法，&lt;br&gt;
這件事情所實現的算法是「將圖片上對應的每一個點都相加」，&lt;br&gt;
也就是某一個點是 「128(灰色) + 128(灰色) = 256(超過255 = 白)」&lt;/p&gt;
&lt;p&gt;所以可想而知，加上我們的灰色遮罩，整個都要白起來了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424XZEkrbdP0p.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424XZEkrbdP0p.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424XZEkrbdP0p_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424XZEkrbdP0p_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;opencv-的圖片減法&#34;&gt;OpenCV 的圖片減法&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;add_result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subtract&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這也是一樣的意思，就是一個簡單的減法，&lt;br&gt;
這件事情所實現的算法是「將圖片上對應的每一個點都相減」，&lt;br&gt;
例如某一個點是 「200(偏白色) - 128(灰色) = 72(偏黑)」&lt;/p&gt;
&lt;p&gt;所以可想而知，減掉我們的灰色遮罩，整個都要黑起來了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424BGCklChvsd.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424BGCklChvsd.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424BGCklChvsd_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424BGCklChvsd_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;opencv-的圖層疊加-設定透明度並疊加&#34;&gt;OpenCV 的圖層疊加 (設定透明度並疊加)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;overlapping82&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addWeighted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mask&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;OS: 其實我們幾乎只會使用這個來修圖&amp;hellip; 前面那兩個&amp;hellip; 暫時想不到用法&lt;br&gt;
這個就是真正遮罩的概念了！&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;我們使用 「cv2.addWeighted」 這個函數就能實現接近圖層的效果了！&lt;/p&gt;
&lt;p&gt;cv2.addWeighted(img1, alpha, img2, beta, gamma)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img1: 圖片1&lt;/li&gt;
&lt;li&gt;alpha: 圖片1的透明度&lt;/li&gt;
&lt;li&gt;img2: 圖片2&lt;/li&gt;
&lt;li&gt;beta: 圖片2的透明度&lt;/li&gt;
&lt;li&gt;gamma: 常數，最後每個點再加上這個值。(正就是調亮、負就是調暗)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;這個是圖片灰色遮罩--55-的效果&#34;&gt;這個是「圖片:灰色遮罩 = 5:5」 的效果&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424ltYdgBenr3.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424ltYdgBenr3.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424ltYdgBenr3_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424ltYdgBenr3_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;這個是圖片灰色遮罩--82-的效果&#34;&gt;這個是「圖片:灰色遮罩 = 8:2」 的效果&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424rhuLP8aiae.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424rhuLP8aiae.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424rhuLP8aiae_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424rhuLP8aiae_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】15 - OpenCV 當然也有像 ps 圖層的功能! 什麼?圖片也能加減法?! Add, Subtract, AddWeighted&#34;  &gt;&lt;/p&gt;
&lt;p&gt;大家可以再自己慢慢調成自己喜歡的樣子囉！&lt;/p&gt;
&lt;p&gt;當我們想要進行圖片疊加時，例如把某個人P圖到另外一張圖上，就是需要用到這個函數！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;OS: 所以前面兩個功能&amp;hellip;XD 不過畢竟是基本運算，應該要存在的啦&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10244900&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 15 - 進階修圖2，OpenCV 當然也有像 ps 圖層的功能! 什麼？圖片也能加減法?! Add, Subtract, AddWeighted&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/JNingWei/article/details/78241973&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/JNingWei/article/details/78241973&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/qq_41895190/article/details/82905657&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/qq_41895190/article/details/82905657&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 813
Post Date: 2020-09-27 01:13:49
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】14 - 運用 OpenCV 顯示圖片直方圖、分離與合併 RGB 通道</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-histogram-split-merge-rgb-channel/</link>
        <pubDate>Sat, 26 Sep 2020 01:13:29 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-histogram-split-merge-rgb-channel/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424FAfqSKoixc.png" alt="Featured image of post 【OpenCV】14 - 運用 OpenCV 顯示圖片直方圖、分離與合併 RGB 通道" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204248a6XSR8PCq.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204248a6XSR8PCq.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204248a6XSR8PCq_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204248a6XSR8PCq_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】14 - 運用 OpenCV 顯示圖片直方圖、分離與合併 RGB 通道&#34;  &gt;&lt;/p&gt;
&lt;p&gt;還是繼續請我們的貓貓助教來幫忙XDDDD&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day14_%E5%88%86%E9%9B%A2%E5%90%88%E4%BD%B5RGB%E7%9B%B4%E6%96%B9%E5%9C%96_histogram_split_merge.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day14_分離合併RGB直方圖_histogram_split_merge.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;基本修圖技能學習完之後，&lt;br&gt;
再來我們要來學一些比較進階會使用的修圖技巧囉！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-顯示圖片rgb直方圖分離與合併rgb三通道&#34;&gt;運用 OpenCV 顯示圖片RGB直方圖、分離與合併RGB三通道&lt;/h2&gt;
&lt;h3 id=&#34;運用-opencv-分離rgb三通道&#34;&gt;運用 OpenCV 分離RGB三通道&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;split_RGBThreeChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 3 channel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# make all zeros channel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;R channel:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;merge_RGBThreeChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;G channel:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;merge_RGBThreeChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;B channel:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;merge_RGBThreeChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;分離RGB三通道使用 「cv2.split」 的方式，&lt;/p&gt;
&lt;p&gt;有些時候我們在進階修圖會針對單一通道的顏色進行調整，&lt;br&gt;
此時分離GRB三個通道就是非常重要的技術了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424gr76CgBJ9L.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424gr76CgBJ9L.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424gr76CgBJ9L_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424gr76CgBJ9L_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】14 - 運用 OpenCV 顯示圖片直方圖、分離與合併 RGB 通道&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;運用-opencv-合併rgb三通道&#34;&gt;運用 OpenCV 合併RGB三通道&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;merge_RGBThreeChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用 「cv2.merge」 這個函數，&lt;br&gt;
通常我們在進階修圖中，會先分離RGB三通道，&lt;br&gt;
進行各自顏色通道的調整後，&lt;br&gt;
最後合併RGB三通道，完成我們的修圖。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424v2qe3QiVNp.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424v2qe3QiVNp.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424v2qe3QiVNp_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424v2qe3QiVNp_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】14 - 運用 OpenCV 顯示圖片直方圖、分離與合併 RGB 通道&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;運用-opencv-顯示圖片rgb直方圖&#34;&gt;運用 OpenCV 顯示圖片RGB直方圖&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show_histogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 畫出 RGB 三種顏色的分佈圖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;g&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dark_background&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;figure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;figsize&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;enumerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;histogram&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;calcHist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;idx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;histogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xlim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;運用前面分離RGB三通道的技術，&lt;br&gt;
我們可以針對RGB各通道各自畫出他們的直方圖。&lt;/p&gt;
&lt;p&gt;在之後的進階修圖中，我們會觀察各顏色通道分佈的直方圖，&lt;br&gt;
更細部的調整各顏色通道的數值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424FAfqSKoixc.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424FAfqSKoixc.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424FAfqSKoixc_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424FAfqSKoixc_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】14 - 運用 OpenCV 顯示圖片直方圖、分離與合併 RGB 通道&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10244284&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 14 - 進階修圖1，運用 OpenCV 顯示圖片直方圖、分離與合併RGB通道 show histogram, split, merge RGB channel&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/sunny2038/article/details/9080047&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/sunny2038/article/details/9080047&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.jianshu.com/p/9fd339f806a7&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.jianshu.com/p/9fd339f806a7&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 810
Post Date: 2020-09-26 01:13:29
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】13 - 運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 (cv2.putText)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-write-text-rgb-color-code/</link>
        <pubDate>Fri, 25 Sep 2020 01:08:36 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-write-text-rgb-color-code/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/cv2_color_code.png" alt="Featured image of post 【OpenCV】13 - 運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 (cv2.putText)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/cv2_text.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/cv2_text.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/cv2_text_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/cv2_text_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】13 - 運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 (cv2.putText)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;繼續請我們的貓貓助教來幫忙XDDDD&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day13_%E6%96%87%E5%AD%97%E6%9F%A5%E8%89%B2%E7%A2%BC%E9%A1%AF%E7%A4%BA%E8%89%B2%E7%A2%BC_text_get_show_RGBColorCode.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day13_文字查色碼顯示色碼_text_get_show_RGBColorCode.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;完成下一份我們的大作前，我們先來補充一些基本技能吧！&lt;br&gt;
畢竟基本技能才是最經常被我們使用的呢！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-在圖片上寫文字查色碼顯示色碼顏色&#34;&gt;運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色&lt;/h2&gt;
&lt;h3 id=&#34;運用-opencv-在圖片上寫文字&#34;&gt;運用 OpenCV 在圖片上寫文字&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;write_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_SIMPLEX&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;font&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_SIMPLEX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lineType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lineType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重點在 「cv2.putText」 那一行，&lt;br&gt;
其他都是在設定相關的參數~ 可以依照需求變動。&lt;/p&gt;
&lt;p&gt;cv2.putText(img, text, position, font, size, color, thickness, lineType)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img 原圖&lt;/li&gt;
&lt;li&gt;text 要寫的文字&lt;/li&gt;
&lt;li&gt;position 寫文字的位置&lt;/li&gt;
&lt;li&gt;font 字體 (可以參考下圖)&lt;/li&gt;
&lt;li&gt;size 字體大小&lt;/li&gt;
&lt;li&gt;color 字的顏色&lt;/li&gt;
&lt;li&gt;thickness 字的線條寬度&lt;/li&gt;
&lt;li&gt;lineType 線條種類&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;字體範例參考&#34;&gt;字體範例參考&lt;/h4&gt;
&lt;p&gt;關於字體的種類，可以見以下的範例字型：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_PLAIN&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_PLAIN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_DUPLEX&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_DUPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_COMPLEX&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;160&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_COMPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_TRIPLEX&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_TRIPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_COMPLEX_SMALL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_COMPLEX_SMALL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_SCRIPT_SIMPLEX&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_SCRIPT_SIMPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;FONT_HERSHEY_SCRIPT_COMPLEX&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;320&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_SCRIPT_COMPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/cv2_text.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/cv2_text.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/cv2_text_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/cv2_text_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】13 - 運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 (cv2.putText)&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;個人常用區-我經常使用的程式碼片段---傳入-x-y&#34;&gt;(個人常用區) 我經常使用的程式碼片段 - 傳入 (x, y)&lt;/h4&gt;
&lt;p&gt;這部份就是我的個人偏好了XD，&lt;br&gt;
讀者參考上述的內容應該也能改出具有個人特色的文字內容！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;write_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;font&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_SIMPLEX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lineType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lineType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;個人常用區-我經常使用的程式碼片段---傳入-bbox-顯示文字在-bbox-上方&#34;&gt;(個人常用區) 我經常使用的程式碼片段 - 傳入 bbox, 顯示文字在 bbox 上方&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;write_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;putText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FONT_HERSHEY_DUPLEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LINE_AA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;運用-opencv-查色碼&#34;&gt;運用 OpenCV 查色碼&lt;/h3&gt;
&lt;p&gt;查詢色碼我們這裡提供兩種方法，這裡我們想查詢貓身上的顏色，大約是 「x=500, y=400」 的位置&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/cv2_color_code.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/cv2_color_code.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/cv2_color_code_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/cv2_color_code_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】13 - 運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 (cv2.putText)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;大約在這裡!!!&lt;/p&gt;
&lt;h4 id=&#34;運用-opencv-查色碼---方法一&#34;&gt;運用 OpenCV 查色碼 - 方法一&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_RGBColorCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# method 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 3 channel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RGB = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們的第一種方法，是將「整張圖」的RGB拆成三個通道，&lt;br&gt;
再由各自的通道去找對應的座標點，&lt;br&gt;
得到我們指定位置的RGB。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RGB = (193, 163, 125)&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4 id=&#34;運用-opencv-查色碼---方法二&#34;&gt;運用 OpenCV 查色碼 - 方法二&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_RGBColorCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# method 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RGB = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們的第二種方法，是直接找指定座標點的rgb，&lt;br&gt;
寫法看起來就乾淨很多，要注意順序是「先y後x」，&lt;br&gt;
跟我們的直覺有些不同。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RGB = (193, 163, 125)&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4 id=&#34;運用-opencv-查色碼---hex&#34;&gt;運用 OpenCV 查色碼 - HEX&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_RGBColorCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# method 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RGB = (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 轉成我們常見的 Hex 色碼&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;rgb_hex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;RGB Hex = #&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb_hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後提供一個我們常見的「HEX色碼」的產生方法，&lt;br&gt;
方便我們查詢顏色。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RGB Hex = #c1a37d&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;運用-opencv-顯示色碼顏色&#34;&gt;運用 OpenCV 顯示色碼顏色&lt;/h3&gt;
&lt;h4 id=&#34;運用-opencv-顯示色碼顏色---rgb&#34;&gt;運用 OpenCV 顯示色碼顏色 - RGB&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show_RGBColorCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([[[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我們傳入「rgb的三個值」，然後直接建立一個有三個顏色的通道，產生結果顏色。&lt;/p&gt;
&lt;h4 id=&#34;運用-opencv-顯示色碼顏色---hex&#34;&gt;運用 OpenCV 顯示色碼顏色 - HEX&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show_RGBColorCode_fromHEX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;000000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([[[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;HEX Color Code Error !&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這個是特別為了 「HEX色碼」 產生顏色所寫的，&lt;br&gt;
使用  「try-except」 是避免輸入色碼錯誤，&lt;br&gt;
不過這裡寫的是簡單版的，只能除掉簡單的輸入錯誤而已哦~&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不過沒有人會想沒事故意輸入錯誤吧XDDD&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10243430&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 13 - 基本修圖5，運用 OpenCV 在圖片上寫文字、查色碼、顯示色碼顏色 write text, get and show RGB Color Code&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/sunny2038/article/details/9080047&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/sunny2038/article/details/9080047&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itread01.com/content/1540965316.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itread01.com/content/1540965316.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 805
Post Date: 2020-09-25 01:08:36
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】12 - 運用 OpenCV 畫線、畫矩形、畫框、畫橢圓</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-lines-rectangle-ellipse/</link>
        <pubDate>Thu, 24 Sep 2020 01:05:44 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-lines-rectangle-ellipse/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424S0kU6NYIVq.png" alt="Featured image of post 【OpenCV】12 - 運用 OpenCV 畫線、畫矩形、畫框、畫橢圓" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424mcQ2DnCh1v.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424mcQ2DnCh1v.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424mcQ2DnCh1v_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424mcQ2DnCh1v_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】12 - 運用 OpenCV 畫線、畫矩形、畫框、畫橢圓&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day12_%E7%95%AB%E7%B7%9A%E7%95%AB%E7%9F%A9%E5%BD%A2%E7%95%AB%E6%A9%A2%E5%9C%93_lines_rectangle_ellipse.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day12_畫線畫矩形畫橢圓_lines_rectangle_ellipse.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;完成下一份我們的大作前，我們先來補充一些基本技能吧！&lt;br&gt;
畢竟基本技能才是最經常被我們使用的呢！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-畫線畫矩形畫橢圓&#34;&gt;運用 OpenCV 畫線、畫矩形、畫橢圓&lt;/h2&gt;
&lt;h3 id=&#34;運用-opencv-畫線&#34;&gt;運用 OpenCV 畫線&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;draw_lines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;start_point&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;end_point&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# green&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 寬度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重點在 「cv2.line」 那一行，&lt;br&gt;
其他都是在設定相關的參數~ 可以依照需求變動。&lt;/p&gt;
&lt;p&gt;cv2.line(img, start_point, end_point, color, thickness)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img 原圖片&lt;/li&gt;
&lt;li&gt;start_point 線條起點&lt;/li&gt;
&lt;li&gt;end_point 線條終點&lt;/li&gt;
&lt;li&gt;color 線條顏色&lt;/li&gt;
&lt;li&gt;thickness 線條粗細&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424kiqDDabcfy.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424kiqDDabcfy.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424kiqDDabcfy_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424kiqDDabcfy_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】12 - 運用 OpenCV 畫線、畫矩形、畫框、畫橢圓&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;運用-opencv-畫矩形&#34;&gt;運用 OpenCV 畫矩形&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;draw_rectangle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;left_up&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;right_down&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# red&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 寬度 (-1 表示填滿)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rectangle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left_up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;right_down&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rectangle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;125&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重點在 「cv2.rectangle」 那一行，&lt;br&gt;
其他都是在設定相關的參數~ 可以依照需求變動。&lt;/p&gt;
&lt;p&gt;cv2.rectangle(img, left_up, right_down, color, thickness)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img 原圖片&lt;/li&gt;
&lt;li&gt;left_up 矩形左上角座標&lt;/li&gt;
&lt;li&gt;right_down 矩形右下角座標&lt;/li&gt;
&lt;li&gt;color 矩形顏色&lt;/li&gt;
&lt;li&gt;thickness 矩形線條粗細 (-1 表示填滿)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比較特別的為 「thickness = -1」，具有填滿矩形的功能。&lt;/p&gt;
&lt;p&gt;另外補充說明，「left_up 矩形左上角座標」 與 「right_down 矩形右下角座標」，&lt;br&gt;
並非一定要是「左上&amp;amp;右下」，「只要能描述矩形四個端點即可」，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;例如：也可以給「左下&amp;amp;右上」&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424uqvMWLPYqp.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424uqvMWLPYqp.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424uqvMWLPYqp_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424uqvMWLPYqp_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】12 - 運用 OpenCV 畫線、畫矩形、畫框、畫橢圓&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;運用-opencv-畫橢圓&#34;&gt;運用 OpenCV 畫橢圓&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;draw_ellipse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;center&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;#圓心&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;axes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#橢圓的長半軸與短半軸的大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;rotateAngle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#橢圓的旋轉角度 (傾斜 +45度)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;startAngle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#橢圓弧的起始角度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;endAngle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;360&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#橢圓弧的終止角度 (180 表示只畫一半)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# blue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 寬度 (-1 表示填滿)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ellipse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;axes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rotateAngle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;startAngle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endAngle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ellipse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重點在 「cv2.ellipse」 那一行，&lt;br&gt;
其他都是在設定相關的參數~ 可以依照需求變動。&lt;/p&gt;
&lt;p&gt;cv2.ellipse(img, center, axes, rotateAngle, startAngle, endAngle, color, thickness)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img 原圖片&lt;/li&gt;
&lt;li&gt;center 圓心&lt;/li&gt;
&lt;li&gt;axes 橢圓的長半軸與短半軸的大小&lt;/li&gt;
&lt;li&gt;rotateAngle 橢圓的旋轉角度 (傾斜角度)&lt;/li&gt;
&lt;li&gt;startAngle 橢圓弧的起始角度&lt;/li&gt;
&lt;li&gt;endAngle 橢圓弧的終止角度 (180 表示只畫一半)&lt;/li&gt;
&lt;li&gt;color 橢圓的顏色&lt;/li&gt;
&lt;li&gt;thickness 橢圓的線條粗細 (-1 表示填滿)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比較特別的為 「thickness = -1」，具有填滿橢圓的功能。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424S0kU6NYIVq.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424S0kU6NYIVq.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424S0kU6NYIVq_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424S0kU6NYIVq_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】12 - 運用 OpenCV 畫線、畫矩形、畫框、畫橢圓&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10243027&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 12 - 基本修圖4，運用 OpenCV 畫線、畫矩形、畫橢圓 draw lines, draw rectangle, draw ellipse&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.full.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.full.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/u011520181/article/details/83933325&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/u011520181/article/details/83933325&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/tag/opencv/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/tag/opencv/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.geeksforgeeks.org/python-opencv-cv2-circle-method/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.geeksforgeeks.org/python-opencv-cv2-circle-method/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 802
Post Date: 2020-09-24 01:05:44
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-new-pictures-points-circle/</link>
        <pubDate>Wed, 23 Sep 2020 01:04:34 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-new-pictures-points-circle/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424i9FU8hZWcx.png" alt="Featured image of post 【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424BLMYmvoGUn.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424BLMYmvoGUn.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424BLMYmvoGUn_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424BLMYmvoGUn_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day11_%E5%BB%BA%E7%AB%8B%E6%96%B0%E7%A9%BA%E7%99%BD%E5%9C%96%E7%95%AB%E9%BB%9E%E7%95%AB%E5%9C%93_new_pictures_point_circle.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day11_建立新空白圖畫點畫圓_new_pictures_point_circle.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;完成下一份我們的大作前，我們先來補充一些基本技能吧！&lt;br&gt;
畢竟基本技能才是最經常被我們使用的呢！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv--建立新空白圖畫點畫圓&#34;&gt;運用 OpenCV  建立新空白圖、畫點、畫圓&lt;/h2&gt;
&lt;h3 id=&#34;建立新空白圖&#34;&gt;建立新空白圖&lt;/h3&gt;
&lt;p&gt;先定義好我們要的圖片大小，記得如果要彩色的圖片，維度需要設3 (才有RGB通道)，&lt;br&gt;
第二行照我們設定的圖片大小形成圖片，&lt;br&gt;
「因為全部的值都是0，所以圖片是全黑的」～&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 建立全黑的新圖片 100*100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# y, x, RGB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204241BnbDW4LOw.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204241BnbDW4LOw.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204241BnbDW4LOw_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204241BnbDW4LOw_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;那要怎麼建立全白的圖片呢&#34;&gt;那要怎麼建立全白的圖片呢？&lt;/h4&gt;
&lt;p&gt;可以分為兩種方式，第一種就是透過 「np.full」 直接建立一個填滿255的圖片，&lt;br&gt;
第二種一樣先建立一個全黑的圖片的，再透過 &lt;code&gt;img.fill(255)&lt;/code&gt; 填滿全部白色。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# y, x, RGB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 第一種方法，直接建立全白圖片 100*100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;full&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 第二種方法，一樣先建立全黑的圖片，再將全部用白色填滿。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424NQ7PbRalyI.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424NQ7PbRalyI.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424NQ7PbRalyI_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424NQ7PbRalyI_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;運用-opencv-畫點&#34;&gt;運用 OpenCV 畫點&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;draw_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;point_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;point_color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# red&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 要畫的點座標&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;points_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;point&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;points_list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;point_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;point_color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;thickness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其實重點只有 「cv2.circle」 一行，&lt;br&gt;
其他都是在設定相關的參數~ 可以依照需求變動。&lt;/p&gt;
&lt;p&gt;cv2.circle(img, point, point_size, point_color, thickness)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img 原圖片&lt;/li&gt;
&lt;li&gt;point 要畫的點座標&lt;/li&gt;
&lt;li&gt;point_size 點的大小&lt;/li&gt;
&lt;li&gt;point_color 點的顏色&lt;/li&gt;
&lt;li&gt;thickness 點的粗細(這裡值類似點的大小的效果)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424hPaLW7CccM.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424hPaLW7CccM.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424hPaLW7CccM_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424hPaLW7CccM_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;運用-opencv-畫圓&#34;&gt;運用 OpenCV 畫圓&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;draw_cirlces&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# green&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circle_mid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 黃色圓圈，線條寬度為 3 px&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# yellow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 藍色實心圓圈&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# blue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一樣重點也是一行 「cv2.circle」，&lt;/p&gt;
&lt;p&gt;cv2.circle(img, point, point_size, point_color, thickness)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;img 原圖片&lt;/li&gt;
&lt;li&gt;point 要畫的圓圓心&lt;/li&gt;
&lt;li&gt;point_size 圓的大小 (也就是&lt;code&gt;半徑&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;point_color 圓的顏色&lt;/li&gt;
&lt;li&gt;thickness 圓的線條粗細， 「-1 表示將圓填滿顏色」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;眼尖的讀者應該有發現，其實我們「畫點畫圓」是使用一樣的函數哦!&lt;br&gt;
只要將圓縮得很小就是點了！&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424i9FU8hZWcx.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424i9FU8hZWcx.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424i9FU8hZWcx_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424i9FU8hZWcx_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】11 - OpenCV 建立新空白圖、畫點、畫圓&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10241685&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 11 - 基本修圖3，OpenCV 建立新空白圖、畫點、畫圓 create new pictures, draw points and draw circle&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.full.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.full.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/u011520181/article/details/83933325&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/u011520181/article/details/83933325&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-drawing-functions-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/tag/opencv/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/tag/opencv/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.geeksforgeeks.org/python-opencv-cv2-circle-method/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.geeksforgeeks.org/python-opencv-cv2-circle-method/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 792
Post Date: 2020-09-23 01:04:34
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-japanese-filter/</link>
        <pubDate>Tue, 22 Sep 2020 02:16:04 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-japanese-filter/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424N551L43i7R.png" alt="Featured image of post 【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;　總覺得總集篇應該要找個有人的照片，只好讓本人出現&lt;del&gt;獻醜&lt;/del&gt;一下了~&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424JmYXwsTlZO.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424JmYXwsTlZO.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424JmYXwsTlZO_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424JmYXwsTlZO_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;比較一下原圖&#34;&gt;比較一下原圖&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424TjGBZbVSaP.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424TjGBZbVSaP.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424TjGBZbVSaP_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424TjGBZbVSaP_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )&#34;  &gt;&lt;/p&gt;
&lt;p&gt;(&lt;del&gt;先撇除原圖就已經拍很好看的問題&lt;/del&gt;，我們來專心討論修圖哈哈哈)&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day10_%E6%97%A5%E7%B3%BB%E6%BF%BE%E9%8F%A1%E7%B8%BD%E9%9B%86%E7%AF%87_Japanese_style_filter.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day10_日系濾鏡總集篇_Japanese_style_filter.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們已經完成了製作日系濾鏡的整個修圖過程囉！&lt;br&gt;
如果要參考某一個特定的部分，請參考以下連結：&lt;br&gt;
下方的程式碼會「著重在整理並加入參數」使「可用性更高」！&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
&lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day5】](https://ithelp.ithome.com.tw/articles/10236901)&lt;/td&gt;
&lt;td&gt;2. 加強飽和度 (調整飽和度)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day6】](https://ithelp.ithome.com.tw/articles/10237471)&lt;/td&gt;
&lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day7】](https://ithelp.ithome.com.tw/articles/10239714)&lt;/td&gt;
&lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day8】](https://ithelp.ithome.com.tw/articles/10240032)&lt;/td&gt;
&lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day9】](https://ithelp.ithome.com.tw/articles/10240334)&lt;/td&gt;
&lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;運用-opencv-製作屬於自己的濾鏡吧&#34;&gt;運用 OpenCV 製作屬於自己的濾鏡吧&lt;/h2&gt;
&lt;p&gt;最後我們將前六天的成果，在函數中加入一些「可變動的參數」，&lt;br&gt;
這樣可調整性就會變得非常高，&lt;br&gt;
「以後我們想要生成什麼樣的濾鏡，只要調一調參數就可以囉！」&lt;/p&gt;
&lt;p&gt;至於說明的部分我直接打在下方程式碼裡面，方便直接對照。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;japanese_style_filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1. 調亮光線 (調整光線)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2. 加強飽和度 (調整飽和度)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modify_lightness_saturation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lightness&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;saturation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 單位: +- %&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3. 將照片調成冷色調&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modify_color_temperature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cold_rate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 看你要+多冷 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;4. 增添顆粒感&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaussian_noise&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sigma&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.05&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# mean 平均, sigma 標準差&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;5. 降低對比&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modify_contrast_and_brightness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;contrast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# -255 ~ 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;6. 降低高光&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reduce_highlights&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;light_threshold&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 光源的 threshold 以上會被做降光處理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;在網頁中運用-colab-直接產生自己的濾鏡結果&#34;&gt;在網頁中運用 colab 直接產生自己的濾鏡結果&lt;/h2&gt;
&lt;p&gt;在網頁中運用 colab 直接產生自己的濾鏡連結：&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://colab.research.google.com/drive/1TWX7JZpYitVCoDsP9E4mFo6D9cX1CW8R?usp=sharing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://colab.research.google.com/drive/1TWX7JZpYitVCoDsP9E4mFo6D9cX1CW8R?usp=sharing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;嘿對，我用了一個線上就能直接執行的版本。&lt;br&gt;
這樣又更方便了~~~&lt;/p&gt;
&lt;p&gt;使用方式很簡單~~~&lt;/p&gt;
&lt;h3 id=&#34;1-打開網頁執行階段---全部執行&#34;&gt;1. 打開網頁，執行階段 -&amp;gt; 全部執行&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424YkowNZO8YP.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424YkowNZO8YP.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424YkowNZO8YP_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424YkowNZO8YP_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;2-往下找找到要你上傳圖片的地方上傳自己要修的照片&#34;&gt;2. 往下找，找到要你上傳圖片的地方，上傳自己要修的照片&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424k5n1ywA2cA.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424k5n1ywA2cA.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424k5n1ywA2cA_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424k5n1ywA2cA_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;3-上傳完成後結果就出來囉-還附上變化過程呢&#34;&gt;3. 上傳完成後，結果就出來囉 (還附上變化過程呢！)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424N551L43i7R.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424N551L43i7R.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424N551L43i7R_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424N551L43i7R_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;後記-附上變化過程的用途&#34;&gt;後記 (附上變化過程的用途)&lt;/h2&gt;
&lt;p&gt;其實附上變化過程就是更方便「讓我們知道哪裡需要調整參數」，&lt;/p&gt;
&lt;p&gt;如果「看哪個階段結果不是很滿意的話」，「直接去改那個階段的數字」就好囉！&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 10 - 日系濾鏡總集篇，運用 OpenCV 製作屬於自己的濾鏡吧 (內含可於網頁上直接完成濾鏡的 colab )](https://ithelp.ithome.com.tw/articles/10240974)&lt;/li&gt;
&lt;!--
Post ID: 528
Post Date: 2020-09-22 02:16:04
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】9 - 運用 OpenCV 降低圖片的高光</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-reduce-highlights/</link>
        <pubDate>Mon, 21 Sep 2020 02:14:22 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-reduce-highlights/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424JpvfC4TYJF.png" alt="Featured image of post 【OpenCV】9 - 運用 OpenCV 降低圖片的高光" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;h3 id=&#34;--為了凸顯本文效果我有特別將效果加強但實際使用還是要依個人喜好去調整&#34;&gt;-&amp;gt; 為了凸顯本文效果，我有「特別將效果加強」，但實際使用還是要「依個人喜好去調整」&lt;/h3&gt;
&lt;p&gt;(可以看到高光源的地方都已經被模糊處理掉了！)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424iHRfKWS0wS.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424iHRfKWS0wS.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424iHRfKWS0wS_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424iHRfKWS0wS_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】9 - 運用 OpenCV 降低圖片的高光&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day09_%E9%99%8D%E4%BD%8E%E9%AB%98%E5%85%89_reduce_highlights.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day09_降低高光_reduce_highlights.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們繼續製作屬於自己的日系濾鏡啦！&lt;br&gt;
日系濾鏡的修圖過程，大致上有以下步驟：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
&lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day5】](https://ithelp.ithome.com.tw/articles/10236901)&lt;/td&gt;
&lt;td&gt;2. 加強飽和度 (調整飽和度)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day6】](https://ithelp.ithome.com.tw/articles/10237471)&lt;/td&gt;
&lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day7】](https://ithelp.ithome.com.tw/articles/10239714)&lt;/td&gt;
&lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day8】](https://ithelp.ithome.com.tw/articles/10240032)&lt;/td&gt;
&lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day9】](https://ithelp.ithome.com.tw/articles/10240334)&lt;/td&gt;
&lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下來的日子裡我們就來一個個用程式碼實現！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-降低圖片的高光&#34;&gt;運用 OpenCV 降低圖片的高光&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-python&#34;&gt;def&#34; data-lang=&#34;python&#34;&gt;def&#34;&gt;for contour in contours:
    x, y, w, h = cv2.boundingRect(contour) 
    img_zero[y:y+h, x:x+w] = 255 
    mask = img_zero    
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;目的就是為了產生遮罩用的圖片，方便我們做 「cv2.illuminationChange」 這個函數的運算。&lt;/p&gt;
&lt;h2 id=&#34;最後來看一下比較正常一點的結果&#34;&gt;最後來看一下比較正常一點的結果&lt;/h2&gt;
&lt;p&gt;第一張圖片我所設的參數為 「alpha=0.2, beta=0.4」，&lt;br&gt;
但個人覺得他模糊高光的效果有點過頭了，&lt;br&gt;
因此調了一下參數，產生了以下 「alpha=0.2, beta=0.2」 的版本。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424JpvfC4TYJF.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424JpvfC4TYJF.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424JpvfC4TYJF_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424JpvfC4TYJF_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】9 - 運用 OpenCV 降低圖片的高光&#34;  &gt;&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 9 - 日系濾鏡6，運用 OpenCV 降低圖片的高光 reduce highlights](https://ithelp.ithome.com.tw/articles/10240334)&lt;/li&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.pythonf.cn/read/57067&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.pythonf.cn/read/57067&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/zh-tw/code/oka9mbm.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/zh-tw/code/oka9mbm.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/zh_jessica/article/details/77967650&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/zh_jessica/article/details/77967650&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/lfri/p/10627595.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.cnblogs.com/lfri/p/10627595.html&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 526
Post Date: 2020-09-21 02:14:22
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-modify-contrast/</link>
        <pubDate>Sun, 20 Sep 2020 02:13:17 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-modify-contrast/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424QZwRnbCI72.png" alt="Featured image of post 【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;h3 id=&#34;增加對比度的結果白的更白黑的更黑&#34;&gt;(增加對比度的結果：白的更白、黑的更黑)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424yCZjFbRjD4.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424yCZjFbRjD4.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424yCZjFbRjD4_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424yCZjFbRjD4_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day08_%E8%AA%BF%E6%95%B4%E5%B0%8D%E6%AF%94%E5%BA%A6_modify_contrast.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day08_調整對比度_modify_contrast.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們繼續製作屬於自己的日系濾鏡啦！&lt;br&gt;
日系濾鏡的修圖過程，大致上有以下步驟：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
  &lt;th&gt;文章&lt;/th&gt;
  &lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
  &lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day5】](https://ithelp.ithome.com.tw/articles/10236901)&lt;/td&gt;
  &lt;td&gt;2. 加強飽和度 (調整飽和度)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day6】](https://ithelp.ithome.com.tw/articles/10237471)&lt;/td&gt;
  &lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day7】](https://ithelp.ithome.com.tw/articles/10239714)&lt;/td&gt;
  &lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day8】](https://ithelp.ithome.com.tw/articles/10240032)&lt;/td&gt;
  &lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;/td&gt;
  &lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下來的日子裡我們就來一個個用程式碼實現！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-改變圖片的對比度&#34;&gt;運用 OpenCV 改變圖片的對比度&lt;/h2&gt;
&lt;h3 id=&#34;網路上常見的方法&#34;&gt;網路上常見的方法&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;modify_contrast_and_brightness&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 公式： Out_img = alpha*(In_img) + beta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# alpha: alpha參數 (&amp;gt;0)，表示放大的倍数 (通常介於 0.0 ~ 3.0之間)，能夠反應對比度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# a&amp;gt;1時，影象對比度被放大， 0&amp;lt;a&amp;lt;1時 影象對比度被縮小。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# beta:  beta参数，用來調節亮度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 常數項 beta 用於調節亮度，b&amp;gt;0 時亮度增強，b&amp;lt;0 時亮度降低。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;array_alpha&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;2.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# contrast &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;array_beta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# brightness&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# add a beta value to every pixel &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;array_beta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;                    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# multiply every pixel value by alpha&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multiply&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;array_alpha&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 所有值必須介於 0~255 之間，超過255 = 255，小於 0 = 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;增加對比度 - 網路上常見的方法 (但沒有實現黑的更黑這件事): &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;「網路上常見的方法 - 增加對比度」結果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424uruTLUms8u.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424uruTLUms8u.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424uruTLUms8u_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424uruTLUms8u_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;我們可以看見，圖片顏色的對比度確實有增加了(「白的更白」)，&lt;br&gt;
但是卻沒有實現「「黑的更黑」」這件事，&lt;br&gt;
為什麼網路上常見的方法會這樣呢?&lt;/p&gt;
&lt;p&gt;我們參考一張 OpenCV 官方論壇的圖來解釋這件事情：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204242GeeeQ7Ao0.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204242GeeeQ7Ao0.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204242GeeeQ7Ao0_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204242GeeeQ7Ao0_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;從右上角的圖片中，我們可以看到我們實現的方式是透過「乘上某一個 alpha 值」，&lt;br&gt;
導致「分佈被放大，再進行縮小」，&lt;br&gt;
這樣確實能讓「越大的數字(接近255)，被放的更大(超過255後，被計算為255)」，&lt;br&gt;
也就是說「白的更白」這件事就被這樣實現了，&lt;/p&gt;
&lt;p&gt;但「黑的更黑」呢? 上面公式就是出現了這樣的問題，&lt;br&gt;
我們發現越接近0的值，透過上面的公式沒有辦法更接近0，&lt;br&gt;
甚至反而因為放大效果，離0更遠了?!&lt;/p&gt;
&lt;p&gt;這樣就不太符合我們的增加對比度的意義了，&lt;br&gt;
我們想要的是「白的更白、黑的更黑」效果。&lt;/p&gt;
&lt;h3 id=&#34;改良版的方法---實現增加對比度白的更白黑的更黑&#34;&gt;改良版的方法 - 實現增加對比度「白的更白、黑的更黑」&lt;/h3&gt;
&lt;p&gt;先看一下結果圖 - 「增加對比度 (白的更白，黑的更黑)」：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424rXOltsErc9.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424rXOltsErc9.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424rXOltsErc9_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424rXOltsErc9_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;結果圖 - 「減少對比度 (白黑都接近灰，分不清楚)」：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424QZwRnbCI72.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424QZwRnbCI72.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424QZwRnbCI72_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424QZwRnbCI72_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】8 - 運用 OpenCV 改變圖片的對比度 modify contrast (內含：網路上常見錯誤調整對比度方式的分析)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;應該可以很明顯能理解我們所說的意思：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;增加對比度: 「白的更白，黑的更黑」&lt;/li&gt;
&lt;li&gt;減少對比度: 「白黑都接近灰，分不清楚」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以是怎麼實現的呢?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;modify_contrast_and_brightness2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;contrast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 上面做法的問題：有做到對比增強，白的的確更白了。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 但沒有實現「黑的更黑」的效果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;math&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;contrast&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# - 減少對比度/+ 增加對比度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;255.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;contrast&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;255.0&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;127.5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;127.5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 所有值必須介於 0~255 之間，超過255 = 255，小於 0 = 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;減少對比度 (白黑都接近灰，分不清楚): &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;改良版的公式，我們巧妙運用三角函數的特性，&lt;/p&gt;
&lt;p&gt;c = contrast / 255.0&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;contrast = (-255, +255)，代表 c = (-1, +1)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;k = math.tan((45 + 44 * c) / 180 * math.pi)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;將 c 代入，得到約 「tan((1~89)/180*pi)」，&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;我們來思考一下tan的特性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「tan &amp;gt; 45度」: 「y&amp;gt;x」，為「分數 (0~1)」，表示「更接近0」&lt;/li&gt;
&lt;li&gt;「tan &amp;lt; 45度」: 「x&amp;gt;y」，為「假分數 (&amp;gt;1)」，表示「更遠離0」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;那我們再看下一行：&lt;br&gt;
img = (img - 127.5 * (1 - B)) * k + 127.5 * (1 + B)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我們從255的一半 127.5開始看，&lt;br&gt;
後面127.5是正的&lt;br&gt;
前面127.5是負的，因為乘上k，&lt;br&gt;
k可以決定要「更大的負(整個式子結果更負)」或「更小的負(整個式子結果更正)」&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;因為我們是從中間 127.5 開始切，&lt;br&gt;
所以就會有「小於127.5 往更負的方向跑，大於127.5 往更正的方向跑」的現象，&lt;/p&gt;
&lt;p&gt;但隨著值越大，一定會超出 0 ~ 255 的顏色範圍，&lt;br&gt;
所以最後我們用：&lt;/p&gt;
&lt;p&gt;img = np.clip(img, 0, 255).astype(np.uint8)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;所有值必須介於 0~255 之間，超過255 = 255，小於 0 = 0&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;完成了改變對比度的演算法。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10240032&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;【沒錢ps,我用OpenCV!】Day 8 - 日系濾鏡5，運用 OpenCV 改變圖片的對比度 modify contrast  (內含：網路上常見錯誤調整對比度方式的分析)&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.pythonf.cn/read/57067&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.pythonf.cn/read/57067&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/zh-tw/code/oka9mbm.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/zh-tw/code/oka9mbm.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/zh_jessica/article/details/77967650&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/zh_jessica/article/details/77967650&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/lfri/p/10627595.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.cnblogs.com/lfri/p/10627595.html&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;!--
Post ID: 524
Post Date: 2020-09-20 02:13:17
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】7 - 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-add-gaussian-noise/</link>
        <pubDate>Sat, 19 Sep 2020 02:11:01 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-add-gaussian-noise/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424p9lMe3TYvp.png" alt="Featured image of post 【OpenCV】7 - 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖-增加顆粒感&#34;&gt;先來看看今天的結果圖 (增加顆粒感)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424QN7UNaCjM5.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424QN7UNaCjM5.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424QN7UNaCjM5_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424QN7UNaCjM5_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】7 - 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise&#34;  &gt;&lt;/p&gt;
&lt;p&gt;比較一下原圖：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424tdM9bTGh1Q.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424tdM9bTGh1Q.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424tdM9bTGh1Q_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424tdM9bTGh1Q_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】7 - 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day07_%E5%A2%9E%E6%B7%BB%E9%A1%86%E7%B2%92%E6%84%9F%28%E5%A2%9E%E5%8A%A0%E9%AB%98%E6%96%AF%E5%99%AA%E8%81%B2%29_add_gaussian_noise.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day07_增添顆粒感(增加高斯噪聲)_add_gaussian_noise.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們繼續製作屬於自己的日系濾鏡啦！&lt;br&gt;
日系濾鏡的修圖過程，大致上有以下步驟：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
  &lt;th&gt;文章&lt;/th&gt;
  &lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
  &lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day5】](https://ithelp.ithome.com.tw/articles/10236901)&lt;/td&gt;
  &lt;td&gt;2. 加強飽和度 (調整飽和度)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day6】](https://ithelp.ithome.com.tw/articles/10237471)&lt;/td&gt;
  &lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;[【Day7】](https://ithelp.ithome.com.tw/articles/10239714)&lt;/td&gt;
  &lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;/td&gt;
  &lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;/td&gt;
  &lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下來的日子裡我們就來一個個用程式碼實現！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-為圖片增加一些顆粒感-增加高斯噪點&#34;&gt;運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點)&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;gaussian_noise&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sigma&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# int -&amp;gt; float (標準化)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 隨機生成高斯 noise (float + float)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;noise&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;random&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;normal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sigma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# noise + 原圖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;gaussian_out&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;noise&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 所有值必須介於 0~1 之間，超過1 = 1，小於0 = 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;gaussian_out&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gaussian_out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 原圖: float -&amp;gt; int (0~1 -&amp;gt; 0~255)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;gaussian_out&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gaussian_out&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# noise: float -&amp;gt; int (0~1 -&amp;gt; 0~255)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;noise&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;noise&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gaussian noise: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;noise&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Picture add gaussian noise: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gaussian_out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     return gaussian_out , noise&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;我們實際上做了什麼事呢&#34;&gt;我們實際上做了什麼事呢?&lt;/h3&gt;
&lt;h4 id=&#34;我們先認識什麼是高斯噪聲&#34;&gt;我們先認識什麼是「高斯噪聲」&lt;/h4&gt;
&lt;p&gt;要講解這個我們可以先從理解「高斯分佈」開始說明，&lt;/p&gt;
&lt;p&gt;-&amp;gt; 那什麼是「高斯分佈」呢?&lt;br&gt;
其實只是講得比較厲害一點而已，&lt;br&gt;
就是我們所熟悉的「常態分佈」啦~&lt;/p&gt;
&lt;p&gt;任何事情分佈的常態，都會接近「高斯分佈」，&lt;br&gt;
所以我們今天將&lt;code&gt;噪聲&lt;/code&gt;取一個「高斯分佈」的值，&lt;br&gt;
就成為我們的「高斯噪聲」。&lt;/p&gt;
&lt;p&gt;我們的「高斯噪聲」大概長這樣(「平均=0，標準差 = 0.1」)：&lt;br&gt;
(請注意：雖然是「常態分佈」，但值依然是「隨機的」，所以「每次產生的結果都會不同」！)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424DNqBs0Mcc7.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424DNqBs0Mcc7.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424DNqBs0Mcc7_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424DNqBs0Mcc7_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】7 - 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise&#34;  &gt;&lt;/p&gt;
&lt;h4 id=&#34;將高斯噪聲疊加到我們的圖上產生我們要的顆粒感&#34;&gt;將高斯噪聲疊加到我們的圖上，產生我們要的「顆粒感」&lt;/h4&gt;
&lt;p&gt;講簡單點，其實就是把噪聲到圖上加起來而已哈哈哈哈。&lt;br&gt;
上面已經有「標準差 = 0.1」的結果，&lt;br&gt;
我們下面換一個比較大一點的「標準差 = 0.5」的結果，我們看看有什麼樣的效果~~~&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424p9lMe3TYvp.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424p9lMe3TYvp.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424p9lMe3TYvp_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424p9lMe3TYvp_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】7 - 運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise&#34;  &gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;「說不定有人喜歡這種圖片的感覺?」&lt;/del&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 7 - 日系濾鏡4，運用 OpenCV 為圖片增加一些顆粒感 (增加高斯噪點) add gaussian noise](https://ithelp.ithome.com.tw/articles/10239714)&lt;/li&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.pythonf.cn/read/57067&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.pythonf.cn/read/57067&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/zh-tw/code/oka9mbm.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/zh-tw/code/oka9mbm.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/zh_jessica/article/details/77967650&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/zh_jessica/article/details/77967650&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/lfri/p/10627595.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.cnblogs.com/lfri/p/10627595.html&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 521
Post Date: 2020-09-19 02:11:01
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】6 - 運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-temperature-white-balance/</link>
        <pubDate>Fri, 18 Sep 2020 02:19:22 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-temperature-white-balance/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424QGm94UZZ5T.png" alt="Featured image of post 【OpenCV】6 - 運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424QGm94UZZ5T.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424QGm94UZZ5T.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424QGm94UZZ5T_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424QGm94UZZ5T_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】6 - 運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day06_%E8%AA%BF%E6%95%B4%E8%89%B2%E8%AA%BF%E8%89%B2%E6%BA%AB%E7%99%BD%E5%B9%B3%E8%A1%A1_modify_color_temperature.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day06_調整色調色溫白平衡_modify_color_temperature.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們繼續製作屬於自己的日系濾鏡啦！&lt;br&gt;
日系濾鏡的修圖過程，大致上有以下步驟：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
&lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day5】](https://ithelp.ithome.com.tw/articles/10236901)&lt;/td&gt;
&lt;td&gt;2. 加強飽和度 (調整飽和度)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day6】](https://ithelp.ithome.com.tw/articles/10237471)&lt;/td&gt;
&lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下來的日子裡我們就來一個個用程式碼實現！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-調整色調冷色系暖色系色溫白平衡&#34;&gt;運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;modify_color_temperature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# ---------------- 冷色調 ---------------- #  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     height = img.shape[0]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     width = img.shape[1]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     dst = np.zeros(img.shape, img.dtype)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 1.計算三個通道的平均值，並依照平均值調整色調&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgB&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 調整色調請調整這邊~~ &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 白平衡 -&amp;gt; 三個值變化相同&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 冷色調(增加b分量) -&amp;gt; 除了b之外都增加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 暖色調(增加r分量) -&amp;gt; 除了r之外都增加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bAve&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;gAve&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;rAve&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;aveGray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bAve&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gAve&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rAve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 2. 計算各通道增益係數，並使用此係數計算結果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bCoef&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aveGray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bAve&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;gCoef&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aveGray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gAve&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;rCoef&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aveGray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rAve&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgB&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgB&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bCoef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 向下取整&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gCoef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rCoef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 3. 變換後處理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# for i in range(0, height)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# for j in range(0, width)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#             imgb = imgB[i, j]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#             imgg = imgG[i, j]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#             imgr = imgR[i, j]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# if imgb &amp;gt; 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#                 imgb = 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# if imgg &amp;gt; 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#                 imgg = 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# if imgr &amp;gt; 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#                 imgr = 255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#             dst[i, j] = (imgb, imgg, imgr)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 將原文第3部分的演算法做修改版，加快速度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imgB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imgG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imgR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;imgr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cold_rgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dstack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imgg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;imgr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Cold color:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cold_rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cold_rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;我們實際上做了什麼事呢&#34;&gt;我們實際上做了什麼事呢?&lt;/h3&gt;
&lt;p&gt;其實我每天都在程式碼中把註解寫得很清楚了，&lt;br&gt;
這邊越來越不知道要寫什麼了XD&lt;/p&gt;
&lt;p&gt;我們所說的「冷、暖色調」，其實就是「色溫變化的結果」，&lt;br&gt;
而「色溫的變化」，通常也就伴隨著「「白平衡的破壞」」。&lt;/p&gt;
&lt;p&gt;一個白平衡的圖片，色調並不會明顯偏冷或偏暖，&lt;br&gt;
但因為人類視覺上的觀感，有時我們能透過色調使圖片更有特色。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想呈現「「冷酷、冰冷」」的照片，適合使用「冷色調」。&lt;/li&gt;
&lt;li&gt;想呈現「「溫暖、熱情」」的照片，適合使用「暖色調」。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;-&amp;gt; 關於修改演算法的部分：&lt;br&gt;
原文的演算法使用「兩層for迴圈」進行計算，&lt;br&gt;
但既然都「使用了numpy矩陣」，使用「矩陣算法才是更有效率」的方式，&lt;br&gt;
因此才有修改版的寫法，如果讀者有興趣可以自行試試執行時間的差距。&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 6 - 日系濾鏡3，運用 OpenCV 調整色調(冷色系/暖色系)、色溫(白平衡)modify color temperature, white balance](https://ithelp.ithome.com.tw/articles/10237471)&lt;/li&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/weixin_39853245/article/details/101199768&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/weixin_39853245/article/details/101199768&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/qq_36187544/article/details/97657927?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/qq_36187544/article/details/97657927?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/wzwxiaozheng/article/details/38434391?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/wzwxiaozheng/article/details/38434391?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://medium.com/%E9%9D%92%E8%98%8B%E6%9E%9C3c/%E6%94%9D%E5%BD%B1%E5%9F%BA%E7%A4%8E%E8%A8%93%E7%B7%B4-%E7%99%BD%E5%B9%B3%E8%A1%A1%E6%98%AF%E4%BB%80%E9%BA%BC-%E8%89%B2%E6%BA%AB%E8%A9%B2%E6%80%8E%E9%BA%BC%E8%AA%BF%E6%95%B4-efd8eed4df2b&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://medium.com/%E9%9D%92%E8%98%8B%E6%9E%9C3c/%E6%94%9D%E5%BD%B1%E5%9F%BA%E7%A4%8E%E8%A8%93%E7%B7%B4-%E7%99%BD%E5%B9%B3%E8%A1%A1%E6%98%AF%E4%BB%80%E9%BA%BC-%E8%89%B2%E6%BA%AB%E8%A9%B2%E6%80%8E%E9%BA%BC%E8%AA%BF%E6%95%B4-efd8eed4df2b&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/zh-tw/photography/9p425vl.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/zh-tw/photography/9p425vl.html&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 531
Post Date: 2020-09-18 02:19:22
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】5 - 運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-lightness-saturation/</link>
        <pubDate>Thu, 17 Sep 2020 02:09:19 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-lightness-saturation/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424PScjF3eWKg.jpg" alt="Featured image of post 【OpenCV】5 - 運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424M7QGxHMxsU.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424M7QGxHMxsU.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424M7QGxHMxsU_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424M7QGxHMxsU_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】5 - 運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day05_%E8%AA%BF%E6%95%B4%E4%BA%AE%E5%BA%A6%E9%A3%BD%E5%92%8C%E5%BA%A6%28%E9%80%8F%E9%81%8EHSL%E9%A1%8F%E8%89%B2%E7%A9%BA%E9%96%93%29_modify_lightness_saturation.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day05_調整亮度飽和度(透過HSL顏色空間)_modify_lightness_saturation.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;我們繼續製作屬於自己的日系濾鏡啦！&lt;br&gt;
日系濾鏡的修圖過程，大致上有以下步驟：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
&lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;[【Day5】](https://ithelp.ithome.com.tw/articles/10236901)&lt;/td&gt;
&lt;td&gt;2. 加強飽和度 (調整飽和度)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下來的日子裡我們就來一個個用程式碼實現！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-調整亮度飽和度&#34;&gt;運用 OpenCV 調整亮度、飽和度&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;modify_lightness_saturation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 圖像歸一化，且轉換為浮點型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;fImg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;float32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;fImg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fImg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;255.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顏色空間轉換 BGR -&amp;gt; HLS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hlsImg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fImg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2HLS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hlsImg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# lightness 調整為  &amp;#34;1 +/- 幾 %&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;saturation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# saturation 調整為 &amp;#34;1 +/- 幾 %&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 亮度調整&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lightness&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;100.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 應該要介於 0~1，計算出來超過1 = 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 飽和度調整&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;saturation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;100.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 應該要介於 0~1，計算出來超過1 = 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顏色空間反轉換 HLS -&amp;gt; BGR &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;result_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hlsCopy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_HLS2BGR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;result_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;High Saturation:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;我們實際上做了什麼事呢&#34;&gt;我們實際上做了什麼事呢?&lt;/h3&gt;
&lt;p&gt;我們先來認識 「HLS 顏色空間」，&lt;br&gt;
(以下圖片引用自：&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/67930839&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/67930839&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424PScjF3eWKg.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424PScjF3eWKg.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424PScjF3eWKg_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424PScjF3eWKg_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】5 - 運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;從上圖我們可以看見在 「HLS 顏色空間」 中色彩分佈的三維座標，&lt;br&gt;
分別是 「Hue(顏色)」、「Lightness(亮度)」、「Saturation(飽和度)」，&lt;br&gt;
我們能透過這三維找到我們所需要的顏色，&lt;/p&gt;
&lt;p&gt;至於看到這三維座標所代表的意義，&lt;br&gt;
相信你們已經能了解我們怎麼改變 「Lightness(亮度)」與「Saturation(飽和度)」了吧！&lt;/p&gt;
&lt;p&gt;我們首先將「int範圍(0&lt;del&gt;255)」的顏色表示轉換為「浮點數(0&lt;/del&gt;1)」，&lt;br&gt;
這樣方便我們做比例上的運算。&lt;/p&gt;
&lt;p&gt;在上面提供的程式碼裡面，最後的結果會改變為 「1 + x/100.0」，&lt;br&gt;
我們改變的「lightness」, 「saturation」值都是對應 「x改變的% (正或負)」 大小。&lt;/p&gt;
&lt;p&gt;避免運算結果超過範圍，我們在運算後，將「所有超過1的值皆設為1」。&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 5 - 日系濾鏡2，運用 OpenCV 調整亮度、飽和度(透過轉移至 HLS 顏色空間) modify lightness, saturation](https://ithelp.ithome.com.tw/articles/10236901)&lt;/li&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;http://help.corel.com/paintshop-pro/v20/main/ct/documentation/index.html#page/Corel_PaintShop_Pro/Adjusting_hue_and_saturation.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://help.corel.com/paintshop-pro/v20/main/ct/documentation/index.html#page/Corel_PaintShop_Pro/Adjusting_hue_and_saturation.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.itdaan.com/tw/6488189fb5d7d60b163039cd0a004f70&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itdaan.com/tw/6488189fb5d7d60b163039cd0a004f70&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/67930839&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/67930839&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 519
Post Date: 2020-09-17 02:09:19
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】4 - 運用 OpenCV 調整光線 (modify brightness, intensity)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/python-opencv-brightness/</link>
        <pubDate>Wed, 16 Sep 2020 02:07:24 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/python-opencv-brightness/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424SodKWaHpS4.png" alt="Featured image of post 【OpenCV】4 - 運用 OpenCV 調整光線 (modify brightness, intensity)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424n5zJjR0xzT.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424n5zJjR0xzT.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424n5zJjR0xzT_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424n5zJjR0xzT_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】4 - 運用 OpenCV 調整光線 (modify brightness, intensity)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day04_%E8%AA%BF%E6%95%B4%E4%BA%AE%E5%BA%A6_modify_brightness.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day04_調整亮度_modify_brightness.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;再來我們要來製作屬於自己的日系濾鏡啦！&lt;br&gt;
研究了一下日系濾鏡的修圖過程，大致上有以下步驟：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;階段目標&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;[【Day4】](https://ithelp.ithome.com.tw/articles/10236441)&lt;/td&gt;
&lt;td&gt;1. 調亮光線 (調整光線)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2. 加強飽和度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;3. 將照片調成冷色調&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;4. 增添顆粒感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;5. 降低對比&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;6. 降低高光&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;接下來的日子裡我們就來一個個用程式碼實現！&lt;/p&gt;
&lt;h2 id=&#34;運用-opencv-調整光線&#34;&gt;運用 OpenCV 調整光線&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;modify_intensity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;origin picture:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;maxIntensity&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;255.0&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# depends on dtype of image data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Parameters for manipulating image data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;phi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Increase intensity &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;increase_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxIntensity&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;phi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxIntensity&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;increase_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;increase_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Increase intensity :&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;increase_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Decrease intensity  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;decrease_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxIntensity&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;phi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;maxIntensity&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;decrease_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decrease_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Decrease intensity :&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;show_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decrease_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;我們實際上做了什麼事呢&#34;&gt;我們實際上做了什麼事呢?&lt;/h3&gt;
&lt;p&gt;我們看圖是最好懂的哈哈哈，&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204248087Z5kol1.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204248087Z5kol1.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204248087Z5kol1_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204248087Z5kol1_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】4 - 運用 OpenCV 調整光線 (modify brightness, intensity)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;中間的虛線是我們原來顏色的分布，分布範圍在 0 ~ 255，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果是增加光線，也就是紅線，可以看到全部的值往y = 255靠近 (更亮了)&lt;/li&gt;
&lt;li&gt;如果是減少光線，也就是藍線，可以看到全部的值往y = 0靠近 (更暗了)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我們來看一下我們做了什麼運算 (來現字醜了(X：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;調亮：(maxIntensity/phi)*(origin_img/(maxIntensity/theta))**0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424vv2fQGmRBW.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424vv2fQGmRBW.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424vv2fQGmRBW_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424vv2fQGmRBW_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】4 - 運用 OpenCV 調整光線 (modify brightness, intensity)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;公式化簡後，除了 phi,theta 能夠改變最終值外，&lt;br&gt;
基本能發現他是讓原本的 「origin 值開根號」乘上 「根號255」，&lt;br&gt;
所以會呈現「凹口向下」的曲線。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;調暗：(maxIntensity/phi)*(origin_img/(maxIntensity/theta))**2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424SodKWaHpS4.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424SodKWaHpS4.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424SodKWaHpS4_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424SodKWaHpS4_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】4 - 運用 OpenCV 調整光線 (modify brightness, intensity)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;公式化簡後，除了 phi,theta 能夠改變最終值外，&lt;br&gt;
基本能發現他是讓原本的 「origin 平方」 除以 &lt;code&gt;255&lt;/code&gt;，&lt;br&gt;
所以會呈現「凹口向上」的曲線。&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 4 - 日系濾鏡1，運用 OpenCV 調整光線 (modify brightness)](https://ithelp.ithome.com.tw/articles/10236441)&lt;/li&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://engoo.com.tw/blog/%E3%80%90%E4%B8%BB%E9%A1%8C%E5%96%AE%E5%AD%97%E3%80%91%E4%BF%AE%E5%9C%96app%E9%83%BD%E6%98%AF%E8%8B%B1%E6%96%87%E7%9C%8B%E4%B8%8D%E6%87%82%EF%BC%9F%E8%B7%9F%E4%BF%AE%E5%9C%96%E3%80%81%E7%85%A7/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://engoo.com.tw/blog/%E3%80%90%E4%B8%BB%E9%A1%8C%E5%96%AE%E5%AD%97%E3%80%91%E4%BF%AE%E5%9C%96app%E9%83%BD%E6%98%AF%E8%8B%B1%E6%96%87%E7%9C%8B%E4%B8%8D%E6%87%82%EF%BC%9F%E8%B7%9F%E4%BF%AE%E5%9C%96%E3%80%81%E7%85%A7/&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://ithelp.ithome.com.tw/articles/10219730&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ithelp.ithome.com.tw/articles/10219730&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.itdaan.com/tw/50859156abb7ff6eb099b301cb74f130&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.itdaan.com/tw/50859156abb7ff6eb099b301cb74f130&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://kknews.cc/zh-tw/n/6rknx8v.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kknews.cc/zh-tw/n/6rknx8v.html&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/26889255&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/26889255&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 517
Post Date: 2020-09-16 02:07:24
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】3 - python OpenCV 的剪裁、旋轉、縮放 (改變大小) (crop, rotate, resize)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-crop-rotate-resize/</link>
        <pubDate>Tue, 15 Sep 2020 09:48:56 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-crop-rotate-resize/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424fRFuHKwYyx.png" alt="Featured image of post 【OpenCV】3 - python OpenCV 的剪裁、旋轉、縮放 (改變大小) (crop, rotate, resize)" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;今天我們又請來了貓貓當我們助教囉~~~&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424ZSHWQFeftb.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424ZSHWQFeftb.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424ZSHWQFeftb_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424ZSHWQFeftb_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】3 - python OpenCV 的剪裁、旋轉、縮放 (改變大小) (crop, rotate, resize)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day03_%E5%9C%96%E7%89%87%E5%89%AA%E8%A3%81%E6%97%8B%E8%BD%89%E7%B8%AE%E6%94%BE_crop_rotate_resize.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day03_圖片剪裁旋轉縮放_crop_rotate_resize.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-裁減圖片&#34;&gt;1. 裁減圖片&lt;/h2&gt;
&lt;p&gt;裁減圖片的方式，不需要使用 OpenCV 特別的函數，&lt;br&gt;
我們只需要「知道座標」後，決定要裁減的範圍即可。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-python&#34;&gt;def&#34; data-lang=&#34;python&#34;&gt;def&#34;&gt;def rotate_img(img):
    (h, w, d) = img.shape # 讀取圖片大小
    center = (w // 2, h // 2) # 找到圖片中心

    # 第一個參數旋轉中心，第二個參數旋轉角度(-順時針/+逆時針)，第三個參數縮放比例
    M = cv2.getRotationMatrix2D(center, 15, 1.0)

    # 第三個參數變化後的圖片大小
    rotate_img = cv2.warpAffine(img, M, (w, h))

    return rotate_img
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424VHOicczeeT.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424VHOicczeeT.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424VHOicczeeT_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424VHOicczeeT_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】3 - python OpenCV 的剪裁、旋轉、縮放 (改變大小) (crop, rotate, resize)&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;3-縮放圖片-cv2resize&#34;&gt;3. 縮放圖片 cv2.resize&lt;/h2&gt;
&lt;p&gt;縮放圖片我們使用 「cv2.resize」。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;resize_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;scale_percent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 要放大縮小幾%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scale_percent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 縮放後圖片寬度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scale_percent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 縮放後圖片高度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 圖片形狀 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;resize_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;interpolation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INTER_AREA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resize_img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424fRFuHKwYyx.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424fRFuHKwYyx.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424fRFuHKwYyx_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424fRFuHKwYyx_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】3 - python OpenCV 的剪裁、旋轉、縮放 (改變大小) (crop, rotate, resize)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;在 「jupyter notebook」 中，直接顯示的圖片結果看不出大小差異，&lt;br&gt;
我們可以使用前篇文章中的 「cv2.imshow」 ，&lt;br&gt;
這樣就可以明顯看出圖片大小的變化。&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 3 - 基本修圖2，OpenCV 圖片的剪裁、旋轉、縮放 (crop, rotate, resize)，在 jupyter 中直接找尋圖片的座標](https://ithelp.ithome.com.tw/articles/10236235)&lt;/li&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.chainnews.com/zh-hant/articles/420945635518.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.chainnews.com/zh-hant/articles/420945635518.htm&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/how-to-crop-an-image-in-opencv-using-python/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/how-to-crop-an-image-in-opencv-using-python/&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/lfri/p/10596530.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.cnblogs.com/lfri/p/10596530.html&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/JNingWei/article/details/78218837&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/JNingWei/article/details/78218837&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/on2way/article/details/46801063&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.csdn.net/on2way/article/details/46801063&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 456
Post Date: 2020-09-15 09:48:56
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-load-show-save/</link>
        <pubDate>Mon, 14 Sep 2020 09:46:18 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/opencv-load-show-save/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/20120424zAI6jmo27a.png" alt="Featured image of post 【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」" /&gt;&lt;h2 id=&#34;先來看看今天的結果圖&#34;&gt;先來看看今天的結果圖&lt;/h2&gt;
&lt;p&gt;讓我們歡迎我們的貓貓助教~~~&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424p3RjmlttHa.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424p3RjmlttHa.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424p3RjmlttHa_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424p3RjmlttHa_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;--此篇文章的程式碼-github&#34;&gt;-&amp;gt; 此篇文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day02_%E5%9C%96%E7%89%87%E8%AE%80%E5%8F%96%E9%A1%AF%E7%A4%BA%E5%AD%98%E6%AA%94_image_load_show_save.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day02_圖片讀取顯示存檔_image_load_show_save.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;讀取圖片-cv2imread&#34;&gt;讀取圖片 cv2.imread&lt;/h2&gt;
&lt;p&gt;讀取圖片的方式很簡單，只需要使用 &lt;code&gt;cv2.imread(file_name)&lt;/code&gt;，&lt;br&gt;
並指定好 「file_name」的路徑即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;file_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./testdata/cat.jpg&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 讀取圖片 laod image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;origin_img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;-&amp;gt; 補充：快速查看檔案路徑的方式&lt;br&gt;
可以直接將檔案用滑鼠拖入 「terminal」 中 (「windows 可以使用 cmd」)，就可以直接得到絕對路徑囉~&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424FkfWgjVlS7.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424FkfWgjVlS7.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424FkfWgjVlS7_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424FkfWgjVlS7_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」&#34;  &gt;&lt;/p&gt;
&lt;h2 id=&#34;顯示圖片-cv2imshow--在-jupyter-中直接顯示圖片透過-matplotlib&#34;&gt;顯示圖片 cv2.imshow / 在 jupyter 中直接顯示圖片(透過 「matplotlib」)&lt;/h2&gt;
&lt;p&gt;一般傳統使用 OpenCV 的顯示方式就是使用 &lt;code&gt;cv2.imshow(&#39;My Image&#39;, img)&lt;/code&gt;&lt;br&gt;
第一個參數表示視窗名稱，第二個參數就是你的圖片。&lt;/p&gt;
&lt;p&gt;這個方式會開一個新的視窗顯示出圖片，相比在 jupyter 內建顯示會清晰很多，&lt;br&gt;
但「有時開發還要一直切換視窗，會有點減低效率」，&lt;br&gt;
所以通常開發期間我會更常使用在 jupyter 中直接顯示圖片的方式，&lt;br&gt;
方便我快速察看結果。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 另外開一個視窗顯示圖片 show_img_OpenCV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show_img_OpenCV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 顯示圖片，第一個參數表示視窗名稱，第二個參數就是你的圖片。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My Image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 按下任意鍵則關閉所有視窗&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424N7i15vOTSX.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424N7i15vOTSX.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424N7i15vOTSX_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424N7i15vOTSX_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」&#34;  &gt;&lt;/p&gt;
&lt;p&gt;而我更常使用的是，透過 「matplotlib」 直接在 jupyter 中直接顯示圖片，&lt;br&gt;
除了開發快速(能直接顯示結果)之外，也能快速查找座標，&lt;br&gt;
(明天的內容就會理解快速找座標的便利了！)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 顯示圖片在 jupyter notebook 中 show_img_jupyter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show_img_jupyter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;image_rgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cvtColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COLOR_BGR2RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image_rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424KsJU7GN4N4.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424KsJU7GN4N4.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424KsJU7GN4N4_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424KsJU7GN4N4_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」&#34;  &gt;&lt;/p&gt;
&lt;p&gt;這裡特別要提到一件事情，我們一般認知的顏色通道通常為 「RGB」，&lt;br&gt;
但 OpenCV 中處理圖片的顏色通道為 「BGR」，&lt;br&gt;
如果直接顯示出來，就會發現圖片樣子很像，但顏色與想像中不一樣。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424zAI6jmo27a.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424zAI6jmo27a.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424zAI6jmo27a_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424zAI6jmo27a_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】2 - OpenCV 圖片的讀取、顯示、存檔 (load, imshow, save)，附贈簡易理解「相對路徑」與「絕對路徑」&#34;  &gt;&lt;/p&gt;
&lt;p&gt;(感覺怪怪的&amp;hellip;)&lt;/p&gt;
&lt;p&gt;此時我們需要使用 「cv2.cvtColor(img, cv2.COLOR_BGR2RGB)」，&lt;br&gt;
將顏色通道為從 「BGR」 先轉回 「RGB」 後再顯示，就會是我們預期的顏色了！&lt;/p&gt;
&lt;h2 id=&#34;儲存圖片-cv2imwrite&#34;&gt;儲存圖片 cv2.imwrite&lt;/h2&gt;
&lt;p&gt;儲存圖片的方式也很簡單，只需要使用 &lt;code&gt;cv2.imwrite(&#39;./test_result/out.jpg&#39;, result_img)&lt;/code&gt;，&lt;br&gt;
前面第一個參數為圖片路徑(我們可以直接修改成我們要的副檔名)，第二個就是我們的圖片。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 儲存圖片 save image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 第一個參數為圖片路徑(可直接修改副檔名)，第二個為圖片&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imwrite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./test_result/out.jpg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;--補充-相對路徑與絕對路徑&#34;&gt;-&amp;gt; 補充 相對路徑與絕對路徑&lt;/h2&gt;
&lt;p&gt;看完上面文章的讀者們可能會感到疑惑，&lt;br&gt;
我們在寫檔案路徑的時候有使用 &lt;code&gt;./&lt;/code&gt; 開頭的敘述，&lt;br&gt;
這是什麼意思呢?&lt;/p&gt;
&lt;h3 id=&#34;相對路徑&#34;&gt;相對路徑&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.&lt;/code&gt;表示目前我們所在的路徑，以 「./test_result/out.jpg」 文件為例，&lt;br&gt;
我們從這個路徑底下找 「test_result」 這個資料夾中的 「out.jpg」。&lt;br&gt;
就會是我們儲存圖片的地方。&lt;/p&gt;
&lt;h3 id=&#34;絕對路徑&#34;&gt;絕對路徑&lt;/h3&gt;
&lt;p&gt;「絕對路徑就是檔案完整的路徑」，這種寫法非常的明確，&lt;br&gt;
但缺點就是「彈性非常的差」，如果今天將我們的 code 換了一台電腦執行，&lt;br&gt;
甚至只把資料夾移動到另一個地方，絕對路徑馬上就找不到我們要的檔案了。&lt;/p&gt;
&lt;p&gt;所以建議大家還是多使用「相對路徑」哦~&lt;br&gt;
雖然我剛學的時候也覺得「絕對路徑」真的很明確很棒XDDD&lt;/p&gt;
&lt;h2 id=&#34;--咦-怎麼程式碼裡面好像有偷塞些東西&#34;&gt;-&amp;gt; 咦? 怎麼程式碼裡面好像有偷塞些東西&lt;/h2&gt;
&lt;p&gt;如果讀者仔細看程式碼，可能會發現最後結果怎麼多了一個剪裁圖片的動作？！&lt;br&gt;
這只是為了讓圖片的結果顯得比較不同，(有感覺存到不一樣的檔XD)。&lt;br&gt;
這是明天我們才要來仔細討論的內容哈哈哈哈哈，&lt;br&gt;
但先放出來給大家搶先看囉~&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 2 -  基本修圖1，OpenCV  圖片的讀取、顯示、存檔 (load, show, save)，附贈簡易理解「相對路徑」與「絕對路徑」](https://ithelp.ithome.com.tw/articles/10235826)&lt;/li&gt;
&lt;hr&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.chainnews.com/zh-hant/articles/420945635518.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.chainnews.com/zh-hant/articles/420945635518.htm&lt;/a&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.gtwang.org/programming/opencv-basic-image-read-and-write-tutorial/&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 467
Post Date: 2020-09-14 09:46:18
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        <item>
        <title>【OpenCV】1 - 安裝 python OpenCV install 電腦中圖片的基本概念總整理 (附錄：OpenCV 快速測試用程式碼)</title>
        <link>https://wongwongnotes.com/posts/python/gui/python-opencv/install-pyhton-opencv/</link>
        <pubDate>Sun, 13 Sep 2020 01:30:39 +0800</pubDate>
        
        <guid>https://wongwongnotes.com/posts/python/gui/python-opencv/install-pyhton-opencv/</guid>
        <description>&lt;img src="https://wongwongnotes.com/images/restored/2020/09/201204241omNVv2fI2.png" alt="Featured image of post 【OpenCV】1 - 安裝 python OpenCV install 電腦中圖片的基本概念總整理 (附錄：OpenCV 快速測試用程式碼)" /&gt;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;
&lt;p&gt;今年因為開始了第一份工作的關係，開始忙碌了起來，&lt;br&gt;
但也因為工作的關係，使用了非常大量的 OpenCV 涵式庫。&lt;/p&gt;
&lt;p&gt;但是函式庫總是那麼包山包海，而大家經常使用卻只有那一些，&lt;br&gt;
希望能透過這次寫文章的機會找到一些很冷門、但卻有意外效果的 OpenCV 函式，&lt;/p&gt;
&lt;p&gt;這系列是我學習過程中的筆記，另外過程中會不斷慢慢調整，&lt;br&gt;
最終產出很多以 OpenCV 做的「濾鏡」。&lt;/p&gt;
&lt;h3 id=&#34;--此系列文章的程式碼-github&#34;&gt;-&amp;gt; 此系列文章的程式碼 github&lt;/h3&gt;
&lt;p&gt;這30天的程式碼都會放在 github，有需要歡迎大家自行取用~&lt;br&gt;
(謎之聲：這裡還能偷看一些未發的文哦XD)&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/howarder3/ironman2020_OpenCV_photoshop&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;0-此系列使用的環境與語言&#34;&gt;0. 此系列使用的環境與語言&lt;/h2&gt;
&lt;p&gt;這系列的文章我會使用 「opencv-python」 (版本 4.4.0) 來撰寫，&lt;br&gt;
搭配 「jupyter notebook」 進行簡單實作。&lt;/p&gt;
&lt;h2 id=&#34;1-安裝-opencv&#34;&gt;1. 安裝 OpenCV&lt;/h2&gt;
&lt;p&gt;但其實也就一行&amp;hellip;&amp;hellip;打開你的terminal輸入&lt;br&gt;
「pip install opencv-python -y」&lt;/p&gt;
&lt;p&gt;(會下 &lt;code&gt;-y&lt;/code&gt; 是不管什麼問題一概都yes，如果不要都yes請把他刪掉)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;安裝會需要一點時間，請耐心等待&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;另外提供一個自己的習慣，我通常會開一個新的 「conda 環境」 去安裝，&lt;br&gt;
如果之後要刪除此套件，只需要直接刪除此環境，非常的乾淨俐落。&lt;/p&gt;
&lt;p&gt;但使用 「anaconda」 建立新的環境超出此文討論的範圍，&lt;br&gt;
再請讀者自行搜尋「下載 anaconda」 以及使用 「conda 建立新的環境」。&lt;/p&gt;
&lt;h3 id=&#34;或者也可直接服用github中的&#34;&gt;或者也可直接服用github中的&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/howarder3/ironman2020_OpenCV_photoshop/blob/master/Day01_%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A_environment_setting.ipynb&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Day01_環境設定_environment_setting.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在 「jupyter notebook」 中執行以下程式碼：&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;opencv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;matplotlib&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;並確認執行以下內容 「不會跳出任何 error」 就沒問題了!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;cv2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;numpy&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;glob&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython.display&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clear_output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;執行成功大概會長下面這樣：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424VhORVAe0fc.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424VhORVAe0fc.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424VhORVAe0fc_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424VhORVAe0fc_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】1 - 安裝 python OpenCV install 電腦中圖片的基本概念總整理 (附錄：OpenCV 快速測試用程式碼)&#34;  &gt;&lt;/p&gt;
&lt;h3 id=&#34;附錄opencv-快速測試用程式碼-看會不會顯示出黑畫面&#34;&gt;附錄：OpenCV 快速測試用程式碼 (看會不會顯示出黑畫面)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;numpy&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;cv2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zeros&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imshow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;waitKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cv2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destroyAllWindows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# AW bigcase&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-電腦中圖片的基本概念&#34;&gt;2. 電腦中圖片的基本概念&lt;/h2&gt;
&lt;p&gt;我們先了解一下一張圖片在電腦中怎麼儲存的，&lt;br&gt;
圖片基本上就是「一格一格」的 pixel 存在電腦裡面，&lt;br&gt;
不知道大家有沒有玩過類似下圖的遊戲&lt;/p&gt;
&lt;p&gt;reference：google - CrossMe&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424Z08aiv0rn3.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/20120424Z08aiv0rn3.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/20120424Z08aiv0rn3_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/20120424Z08aiv0rn3_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】1 - 安裝 python OpenCV install 電腦中圖片的基本概念總整理 (附錄：OpenCV 快速測試用程式碼)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;電腦中的圖片就是像這張圖一樣，「一格一格」的 pixel 被儲存的，&lt;/p&gt;
&lt;h2 id=&#34;3-電腦中圖片的大小計算-黑白灰階&#34;&gt;3. 電腦中圖片的大小計算 黑白、灰階&lt;/h2&gt;
&lt;p&gt;像我們常說的「720p」，就是相對於上面的格子有 「1280×720」 格，&lt;br&gt;
「1080p」，就是相對於上面的格子有 &lt;code&gt;1920x1080&lt;/code&gt; 格，&lt;br&gt;
而 &lt;code&gt;4K&lt;/code&gt; 是指 &lt;code&gt;4096x2160&lt;/code&gt; 格(有沒有發現變成說比較大的數字了XD)，&lt;br&gt;
如果像上圖一樣，每一格要嘛是黑、要嘛是白，&lt;br&gt;
我們稱此圖為「黑白」，每一格需要 1 bit 儲存。&lt;/p&gt;
&lt;p&gt;而我們在圖像處理常使用的是「灰階」：&lt;br&gt;
圖片還是黑白的，但由最黑到最白之間可有256種明亮度。&lt;br&gt;
「每一格 pixel 需要 8 bits (1 byte) 儲存」。&lt;/p&gt;
&lt;p&gt;所以 「720p」 的「灰階」圖片，一共有 1280×720x1 bytes&lt;br&gt;
= 921600 bytes = 921KB (接近1MB)&lt;/p&gt;
&lt;h2 id=&#34;4-電腦中圖片的大小計算-彩色全彩常說的rgb&#34;&gt;4. 電腦中圖片的大小計算 彩色(全彩、常說的RGB)&lt;/h2&gt;
&lt;p&gt;對於彩色圖片，而我們在圖像處理常使用的是「全彩」：&lt;br&gt;
全彩：每個顏色有三個通道 (R、G、B)，每個通道以 8 bits (1 byte) 表示，&lt;br&gt;
也就是說，「每一個 pixel 使用了 24 bits (3 bytes) 來表示」，&lt;br&gt;
所以，我們最多可以有1677萬種顏色。&lt;/p&gt;
&lt;p&gt;所以 「720p」 的「全彩」圖片，一共有 1280×720x3 bytes&lt;br&gt;
= 2764800 bytes = 2.7 MB&lt;/p&gt;
&lt;h2 id=&#34;5-電腦中圖片的座標軸-x-y&#34;&gt;5. 電腦中圖片的座標軸 (x, y)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://wongwongnotes.com/images/restored/2020/09/201204241omNVv2fI2.webp&#34;   srcset=&#34;https://wongwongnotes.com/images/restored/2020/09/201204241omNVv2fI2.webp 1600w, https://wongwongnotes.com/images/restored/2020/09/201204241omNVv2fI2_800w.webp 800w, https://wongwongnotes.com/images/restored/2020/09/201204241omNVv2fI2_480w.webp 480w&#34;  loading=&#34;lazy&#34;  alt=&#34;【OpenCV】1 - 安裝 python OpenCV install 電腦中圖片的基本概念總整理 (附錄：OpenCV 快速測試用程式碼)&#34;  &gt;&lt;/p&gt;
&lt;p&gt;在電腦中我們儲存的圖片，預設的座標軸都是在「第四象限」!&lt;br&gt;
並不是我們自然會認為的「第一象限」哦!&lt;/p&gt;
&lt;p&gt;上圖舉了個簡單的例子，像是我畫的點(我有故意把點弄大啦XDD)，&lt;br&gt;
座標是在 (224, 648)，小畫家的左下角也提供我們快速查詢座標的方式。&lt;/p&gt;
&lt;p&gt;知道「座標」的概念，對於我們往後的圖形處理是非常重要的！&lt;/p&gt;
&lt;hr&gt;
&lt;li&gt;本文同步發佈在: 第 12 屆 iT 邦幫忙鐵人賽
[【沒錢ps,我用OpenCV!】Day 1 - 總是要從安裝 OpenCV 開始 + 電腦中圖片的基本概念(灰階、全彩RGB、座標軸、計算圖片大小)](https://ithelp.ithome.com.tw/articles/10235551)&lt;/li&gt;
&lt;h2 id=&#34;reference&#34;&gt;Reference&lt;/h2&gt;
&lt;p&gt;單元一、影像處理基本概念&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;http://yuan.yocjh.kh.edu.tw/photoimpact/01.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://yuan.yocjh.kh.edu.tw/photoimpact/01.htm&lt;/a&gt;&lt;/p&gt;
&lt;!--
Post ID: 458
Post Date: 2020-09-13 01:30:39
Categories: 131 - Python OpenCV, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】
Tags: 131 - Python OpenCV, 046, Python, 12th, 鐵人賽, OpenCV, python, 046 - 12th 鐵人賽 - 【錢不夠買ps的我，只好用OpenCV來修圖了!】, 131, 12th鐵人賽, 【錢不夠買ps的我，只好用OpenCV來修圖了!】
--&gt;</description>
        </item>
        
    </channel>
</rss>
