<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OpenCV｜すらぷろ</title>
	<atom:link href="https://tomtom-stock.com/category/opencv/feed/" rel="self" type="application/rss+xml" />
	<link>https://tomtom-stock.com</link>
	<description>完全初心者からはじめるPython入門</description>
	<lastBuildDate>Thu, 29 Aug 2024 12:55:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://tomtom-stock.com/wp-content/uploads/2022/03/cropped-スクリーンショット-99-32x32.jpg</url>
	<title>OpenCV｜すらぷろ</title>
	<link>https://tomtom-stock.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>[OpenCV] エッジ検出を使って輪郭抽出してみよう！</title>
		<link>https://tomtom-stock.com/2022/04/05/opencv-edgedetection/</link>
					<comments>https://tomtom-stock.com/2022/04/05/opencv-edgedetection/#comments</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Tue, 05 Apr 2022 13:23:13 +0000</pubDate>
				<category><![CDATA[OpenCV]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=881</guid>

					<description><![CDATA[今回は、画像のエッジを検出するための様々な方法を分かりやすく解説していきます！ 本記事では以下のことを解説しています。 エッジ検出とは エッジ検出は、画像上の物体を検出しその輪郭を抽出する手法です。 Python Ope]]></description>
										<content:encoded><![CDATA[
<p>今回は、画像のエッジを検出するための様々な方法を<strong>分かりやすく</strong>解説していきます！</p>



<p>本記事では以下のことを解説しています。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<ul class="wp-block-list">
<li><a href="#a-1">ラプラシアン処理</a></li>



<li><a href="#a-2">Sobel処理</a></li>



<li><a href="#a-3">Canny処理</a></li>
</ul>
</div>



<p></p>



<p></p>



<div class="wp-block-jin-gb-block-box simple-box2">
<div class="wp-block-jin-gb-block-box simple-box7">
<ul class="wp-block-list">
<li><span class="marker"><strong>転職のためのスキルアップ</strong></span>として効率的に学びたい</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>副業</strong></mark>としてプログラミングができるようになりたい</li>



<li><span class="marker"><strong>独学での勉強に</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>限界</strong></mark><strong>を感じている</strong></span></li>
</ul>
</div>



<p>これらに該当する方は<span class="marker"><strong>プログラミングスクール</strong></span>がスキルアップの近道です！<br>是非参考にしてみてください。</p>



<a href="https://tomtom-stock.com/2023/02/08/program-school-recommend/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/02/2025-09-06-194514-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">【2025年最新】プログラミング上達の近道とは？スクールに通うメリットやおすすめランキングも徹底解説！</span><span class="blog-card-excerpt">プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています！特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...</span></div></div></a>



<p></p>



<p class="has-text-align-center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>未経験</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color"><strong>でも安心！</strong></mark><br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>学生</strong></mark>や<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>30代の方</strong></mark>にも<span class="marker"><strong>おすすめなプログラミングスクールがあります</strong></span>！</p>



<div class="wp-block-jin-gb-block-rich-button jin-flexbox"><div class="jin-shortcode-button jsb-visual-shiny jsb-hover-down"><a style="border-radius:40px;background-color:#f39800;background:linear-gradient(107.61deg, #f39800 7.99%, #fbca4d 91.12%)" href="https://tomtom-stock.com/2023/02/08/program-school-recommend/">人気のプログラミングスクールをチェック！</a><img border="0" width="1" height="1" alt=""/></div></div>



<p></p>
</div>



<p></p>



<h2 class="wp-block-heading">エッジ検出とは</h2>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="325" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat4-1024x325.png" alt="" class="wp-image-1132" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat4-1024x325.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat4-300x95.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat4-768x244.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat4.png 1222w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat4-1024x325.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>エッジ検出は、画像上の物体を検出しその輪郭を抽出する手法です。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-4.png" alt="edge-detection1" class="wp-image-886" width="456" height="181"/></figure></div>


<p><strong>Python OpenCV</strong>を用いてエッジ検出をする方法は以下の3つが挙げられます。それぞれエッジの検出方法が異なります。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<ul class="wp-block-list">
<li>ラプラシアン処理</li>



<li>Sobel処理</li>



<li>Canny処理</li>
</ul>
</div>



<p>１つずつ分かりやすく使い方を説明していきたいと思います！</p>



<p></p>



<h2 class="wp-block-heading" id="a-1">ラプラシアン処理</h2>



<p>まずはラプラシアン処理を用いてエッジ検出をする方法についてです。本記事では、理論的な部分は割愛しますが、二次微分（差分）系のフィルタになります。</p>



<p>ラプラシアン処理を行うためには<strong>cv2.Laplacian()</strong>を使います。実際のコードは以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\egao.png&quot;)

    edge_im=cv2.Laplacian(image,-1)

    cv2.imshow(&quot;edge filter&quot;,edge_im)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-full"><img decoding="async" width="911" height="289" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image.png" alt="edge-detection-image1" class="wp-image-882" srcset="https://tomtom-stock.com/wp-content/uploads/2022/04/image.png 911w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-300x95.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-768x244.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/04/image.png 856w" sizes="(max-width: 911px) 100vw, 911px" /></figure>



<p></p>



<p>ここで<strong>cv2.Laplacian(image,-1)</strong>の<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark>では、出力画像のデータ型を指定します。一覧を以下の表に示します。</p>



<figure class="wp-block-table aligncenter"><table><tbody><tr><td class="has-text-align-center" data-align="center">第二引数</td><td class="has-text-align-center" data-align="center"></td></tr><tr><td class="has-text-align-center" data-align="center">-1</td><td class="has-text-align-center" data-align="center">原画像の配列を使用</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_8S</td><td class="has-text-align-center" data-align="center">int 8</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_8U</td><td class="has-text-align-center" data-align="center">unit 8</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_16S</td><td class="has-text-align-center" data-align="center">int 16</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_16U</td><td class="has-text-align-center" data-align="center">unit 16</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_32S</td><td class="has-text-align-center" data-align="center">int 32</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_32F</td><td class="has-text-align-center" data-align="center">float 32</td></tr><tr><td class="has-text-align-center" data-align="center">cv2.CV_64F</td><td class="has-text-align-center" data-align="center">float 64</td></tr></tbody></table></figure>



<p>基本的には、<span class="marker"><strong>”-1”</strong></span> を使用すると良いと思います。<br>データ型が正しく指定されていないと<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>このように正しくエッジが検出されませんでした</strong></mark>。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-6-1024x410.jpg" alt="edge-detection-image2" class="wp-image-894" width="671" height="268"/></figure></div>


<p>また、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark>にカーネルサイズを指定することもできますがラプラシアン処理では変化が見られませんでした。カーネルサイズを指定する場合は、<strong>int型の数値</strong>を<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark>として入力します。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-6-1024x397.png" alt="edge-detection-image3" class="wp-image-895" width="645" height="250"/></figure></div>


<p>他方で、原画像のままラプラシアン処理を行うと、輝度に偏りが出ているため上手く検出されない場合があります。</p>



<p>そのような場合には、<span class="marker"><strong>輝度平滑化処理を原画像に施してからエッジ検出を行うことで精度よく検出できる</strong></span>ようになります。</p>



<p>輝度平滑化を行う場合は以下のコードを先に処理させます。ただし、輝度平滑化処理は、グレイスケール画像にのみ適用できる点に注意してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>#クレイスケールで画像読み込み
　 image=cv2.imread(&quot;C:\Imagefile\egao.png&quot;,cv2.IMREAD_GRAYSCALE)
#輝度の平滑化
    dst=cv2.equalizeHist(image)</code></pre></div>



<p>（輝度平滑化後の実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-3.png" alt="edge-detection-image4" class="wp-image-892" width="520" height="324"/></figure></div>


<h2 class="wp-block-heading" id="a-2">Sobel処理</h2>



<p>続いてSobel処理です。Sobel処理は、ガウシアン処理を用いて<a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">平滑化</a>を行いつつエッジ検出をするものです。平滑化を行っているためノイズの影響を低減しつつエッジ検出を行うことができるという特徴があります。</p>



<p>参考：<a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">[フィルタ処理] 平滑化の方法について</a></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\egao.png&quot;)

    edge_im=cv2.Sobel(image,-1,0,1)

    cv2.imshow(&quot;edge filter&quot;,edge_im)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-1.png" alt="edge-detection-image5" class="wp-image-883" width="393" height="244"/></figure></div>


<p>ここで、<strong>cv2.Sobel()</strong>はこのように記述しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code> edge_im=cv2.Sobel(image, bit, dx, dy, ksize)</code></pre></div>



<p></p>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>処理対象の画像を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br>出力配列のデータ型を指定（基本は-1を指定）<br>（詳細はラプラシアン処理項目で紹介しています）</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>x方向の微分次数を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第四引数</strong></mark><br>y方向の微分次数を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第五引数</strong></mark><br>カーネルサイズを指定（1，3，5，7のどれかを指定）</p>
</div>



<p>これらの引数を踏まえて、色々と値を変化させてみた結果を以下に示していきたいと思います！</p>



<p>まず、<strong>y方向</strong>の微分次数を<strong>「1」</strong>として、<strong>x方向</strong>の微分次数を<strong>「0」</strong>とした場合のエッジ検出結果はx方向を微分する場合と少し異なったエッジが検出されました。</p>



<p><strong>xとyの両方</strong>向の微分次数を<strong>「1」</strong>とした場合には、エッジの強さが弱くなってしまいました。</p>



<p>ksizeのみを変更させた場合には、あまり変化は見られませんでした。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="959" height="716" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-7.jpg" alt="edge-detection-image6" class="wp-image-903" srcset="https://tomtom-stock.com/wp-content/uploads/2022/04/image-7.jpg 959w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-300x224.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-768x573.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7.jpg 856w" sizes="(max-width: 959px) 100vw, 959px" /></figure>



<h2 class="wp-block-heading" id="a-3">Canny処理</h2>



<p>Canny処理は、<strong>画像中の強いエッジを検出し</strong><span class="marker"><strong>弱いエッジ（少数の画素で構成されたエッジ）は削除することができる</strong></span>エッジ検出手法です。</p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">特徴</div>
<ul class="wp-block-list">
<li>エッジの輪郭を分かりやすく検出できる</li>



<li>誤検出が少ない</li>
</ul>
</div>



<p>実際にどのように検出されるか見た方が早いと思いますので以下にコードを示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\egao.png&quot;)

    edge_im=cv2.Canny(image,40.0,200.0)
    cv2.imshow(&quot;edge filter&quot;,edge_im)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-2.png" alt="edge-detection-image7" class="wp-image-884" width="426" height="265"/></figure></div>


<p>このように検出できました。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>処理対象の画像を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br>第１しきい値（最小しきい値）をfloat型で指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>第２しきい値（最大しきい値）をfloat型で指定</p>
</div>



<p><strong>最小しきい値</strong>と<strong>最大しきい値</strong>を任意に変化させてエッジ検出した結果を以下に示します。最小しきい値が<span class="marker"><strong>小さすぎる場合にはエッジが誤検出されています</strong></span>。逆に最小しきい値が<span class="marker"><strong>大きすぎる場合にはエッジが正しく検出されません</strong></span>でした。</p>



<p>この二つの変数を正しく調整すると、<strong>（65.0, 200.0）</strong>の結果のようにエッジが正しく検出されるようになりました！</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="281" src="https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-1024x281.png" alt="edge-detection-image8" class="wp-image-904" srcset="https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-1024x281.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-300x82.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-768x211.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7.png 1328w, https://tomtom-stock.com/wp-content/uploads/2022/04/image-7-1024x281.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>エッジ検出したい画像にもよると思いますが、今回用いたような単純な画像ではCanny処理が最も正確に輪郭検出できていることが分かりました。</p>



<p></p>



<p>もっと<span class="marker"><strong>OpenCVやPython</strong></span>について学びたい人はコチラの記事を参考にしてみて下さい！</p>



<a href="https://tomtom-stock.com/2022/03/13/python-bookreview-syosinnsya/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/eyecatch_recombooks-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">[2025年版][難易度別] Python学習にオススメな参考書：厳選9冊！</span><span class="blog-card-excerpt">Pythonを勉強する初心者から中級者を対象として、2023年現在で本当に良いと感じた厳選9冊を紹介しています。Pythonの基礎を学べる書籍から、GUI、アプリ作成、機械学習などを学べる書籍まで幅広く紹介しています！レビューも書き込んでいます！...</span></div></div></a>



<p>また、プログラミングをしていて疲れやすいなと感じる場合にはこちらを参考にしてみて下さい！</p>



<a href="https://tomtom-stock.com/2023/01/20/programming_recom_gadget/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/01/gadget_recommend-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング学習に役立つガジェット厳選4選！</span><span class="blog-card-excerpt">筆者が実際に使ってみて有用だと感じた、プログラミングに役立つガジェットを紹介しています！プログラミングされている方には是非とも読んでみてほしい記事です！...</span></div></div></a>



<p></p>



<p>以上となります。最後まで見ていただきありがとうございました！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2022/04/05/opencv-edgedetection/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>[OpenCV] 画像にモザイクをかける方法</title>
		<link>https://tomtom-stock.com/2022/04/03/opencv-mosaicprocessing/</link>
					<comments>https://tomtom-stock.com/2022/04/03/opencv-mosaicprocessing/#comments</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Sun, 03 Apr 2022 02:03:59 +0000</pubDate>
				<category><![CDATA[OpenCV]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=842</guid>

					<description><![CDATA[自分で色々なモザイク画像を作成してみるのは面白そうですよね。モザイク処理のように画像に加工を行う際には、フィルタ処理というものを使います。 OpenCVには様々なフィルタ処理が用意されています。 本記事では膨張処理と収縮]]></description>
										<content:encoded><![CDATA[
<p>自分で色々なモザイク画像を作成してみるのは面白そうですよね。モザイク処理のように画像に加工を行う際には、<strong>フィルタ処理</strong>というものを使います。</p>



<p>OpenCVには様々な<strong>フィルタ処理</strong>が用意されています。</p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">代表的なフィルタ</div>
<ul class="wp-block-list">
<li><a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">膨張</a></li>



<li><a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">収縮</a></li>



<li><a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">ブラーフィルタ</a></li>



<li><a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">メディアンフィルタ</a></li>



<li><a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">ガウシアンフィルタ</a>　　など</li>
</ul>
</div>



<p><br>本記事では<span class="marker"><strong>膨張処理と収縮処理</strong></span>を用いて、以下のような<strong>モザイク処理をかける方法</strong>を分かりやすく解説していきたいと思います！<br></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-86.png" alt="after-process-image1" class="wp-image-867" width="243" height="226"/></figure></div>


<p></p>



<h2 class="wp-block-heading">モザイク処理の流れ</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="334" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png" alt="" class="wp-image-1170" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-300x98.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-768x250.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2.png 1205w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>まずは、モザイク処理の流れを簡単に説明していきたいと思います！モザイク処理の簡単な流れは以下の通りです。</p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">モザイク処理の一般的な流れ</div>
<ol class="wp-block-list">
<li>収縮処理</li>



<li>綺麗に補間されないように指定した後に膨張処理</li>
</ol>
</div>



<p><strong>①の収縮処理</strong>を行うときに、小さく収縮させるほど膨張させたときに<span class="marker"><strong>粗いモザイク画像</strong></span>になります。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="514" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-88-1024x514.png" alt="after-process-image2" class="wp-image-869" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-88-1024x514.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-88-300x151.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-88-768x385.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-88.png 1144w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-88-1024x514.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<h2 class="wp-block-heading">モザイク処理を適用してみる</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="337" src="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png" alt="" class="wp-image-1168" srcset="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-300x99.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-768x253.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat.png 1200w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>では、実際にモザイク処理を画像に適用してみましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    SCALE=0.1
    height=image.shape[0]
    width=image.shape<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank01.png" />
#収縮処理
    erode=cv2.resize(image,(round(width*SCALE),round(height*SCALE)),
                      interpolation=cv2.INTER_NEAREST)
#収縮後の画素をそのまま補間せずに膨張させる
    mosaic = cv2.resize(erode, (round(width), round(height)),
                        interpolation=cv2.INTER_NEAREST)

    cv2.imshow(&quot;mosaic image&quot;,mosaic)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-87.png" alt="after-process-image3" class="wp-image-868" width="636" height="324"/></figure></div>


<p>このようにモザイク画像ができました！<br>本プログラムでは、以下の変数を指定しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>    SCALE=0.1
    height=image.shape[0]
    width=image.shape<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank01.png" /></code></pre></div>



<p></p>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>SCALE</strong></mark>：値が小さいほど粗いモザイクとなる<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>height</strong></mark>：画像の縦の大きさを取得<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>width</strong></mark>：画像の横の大きさを取得</p>
</div>



<p></p>



<p>ここでSCALEの値を変化させてみます。上記の結果は、SCALE=0.1なのでSCALEの値をSCALE＝0.05に変化させて実行してみると以下のようになりました。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-89.png" alt="after-process-image4" class="wp-image-870" width="286" height="266"/><figcaption class="wp-element-caption">SCALE 0.05</figcaption></figure></div>


<p>このようにモザイクの解像度が粗くなっていることが分かります。</p>



<p>また、膨張を行う際には、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>interpolation=cv2.INTER_NEAREST</strong></mark>を指定する必要があります。これは、収縮後の画素が膨張時に<span class="marker">綺麗に補間されて膨張されないようにする</span>ためのものです。</p>



<p></p>



<p></p>



<p>以上となります。最後まで見ていただきありがとうございました！</p>



<p></p>



<p><a href="https://tomtom-stock.com/2022/04/05/opencv-edgedetection/">輪郭を抽出する方法</a>や<a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">ノイズ削減について</a>も紹介していますので是非参考にしてみて下さい！</p>



<p>画像を<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>うっすらとぼかす</strong></mark>際に使われる<span class="marker"><strong>cv2.blur()</strong></span>など様々なフィルタを紹介しています！</p>



<p></p>



<p>プログラミングをしていて疲れちゃうなと感じる場合にはこちらの記事を参考にしてみてください！</p>



<a href="https://tomtom-stock.com/2023/01/20/programming_recom_gadget/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/01/gadget_recommend-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング学習に役立つガジェット厳選4選！</span><span class="blog-card-excerpt">筆者が実際に使ってみて有用だと感じた、プログラミングに役立つガジェットを紹介しています！プログラミングされている方には是非とも読んでみてほしい記事です！...</span></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2022/04/03/opencv-mosaicprocessing/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>[OpenCV] フィルタ処理で画像のノイズを低減する方法</title>
		<link>https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/</link>
					<comments>https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/#comments</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Sun, 27 Mar 2022 13:01:28 +0000</pubDate>
				<category><![CDATA[OpenCV]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=828</guid>

					<description><![CDATA[画像からデータを取得して、「良」「不良」判定を行ったりAIに識別させたりするときに画像が上手く二値化処理されず精度がなかなか上がらないことがありますよね。 この原因として考えられるものの一つとして、画像上のノイズが考えら]]></description>
										<content:encoded><![CDATA[
<p>画像からデータを取得して、「<strong>良</strong>」「<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>不良</strong></mark>」判定を行ったりAIに識別させたりするときに画像が<span class="marker"><strong>上手く二値化処理されず</strong></span>精度がなかなか上がらないことがありますよね。</p>



<p>この原因として考えられるものの一つとして、<strong>画像上のノイズ</strong>が考えられます。このノイズを低減することによって、より<span class="marker"><strong>精度の高い識別が行えるようになる</strong></span>のでフィルタ処理は非常に重要な<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>ファクター</strong></mark>なのです！</p>



<p>今回は、<strong>フィルタ処理</strong>を用いて画像の<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>ノイズを低減させる方法</strong></mark>について解説していきます！</p>



<p></p>



<div class="wp-block-jin-gb-block-box simple-box2">
<div class="wp-block-jin-gb-block-box simple-box7">
<ul class="wp-block-list">
<li><span class="marker"><strong>転職のためのスキルアップ</strong></span>として効率的に学びたい</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>副業</strong></mark>としてプログラミングができるようになりたい</li>



<li><span class="marker"><strong>独学での勉強に</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>限界</strong></mark><strong>を感じている</strong></span></li>
</ul>
</div>



<p>これらに該当する方は<span class="marker"><strong>プログラミングスクール</strong></span>がスキルアップの近道です！<br>是非参考にしてみてください。</p>



<a href="https://tomtom-stock.com/2023/02/08/program-school-recommend/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/02/2025-09-06-194514-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">【2025年最新】プログラミング上達の近道とは？スクールに通うメリットやおすすめランキングも徹底解説！</span><span class="blog-card-excerpt">プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています！特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...</span></div></div></a>



<p></p>



<p class="has-text-align-center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>未経験</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color"><strong>でも安心！</strong></mark><br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>学生</strong></mark>や<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>30代の方</strong></mark>にも<span class="marker"><strong>おすすめなプログラミングスクールがあります</strong></span>！</p>



<div class="wp-block-jin-gb-block-rich-button jin-flexbox"><div class="jin-shortcode-button jsb-visual-shiny jsb-hover-down"><a style="border-radius:40px;background-color:#f39800;background:linear-gradient(107.61deg, #f39800 7.99%, #fbca4d 91.12%)" href="https://tomtom-stock.com/2023/02/08/program-school-recommend/">人気のプログラミングスクールをチェック！</a><img border="0" width="1" height="1" alt=""/></div></div>



<p></p>
</div>



<p></p>



<h2 class="wp-block-heading">画像のノイズとは</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="334" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png" alt="" class="wp-image-1170" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-300x98.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-768x250.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2.png 1205w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>画像のノイズとは、画像処理を行う上で<strong>不適切に検出されてしまった領域</strong>のことを指します。</p>



<p>通常、画像処理を行う際には以下に示すように、前処理として<a href="https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/">二値化処理</a>を行います。そして、二値化処理された画像の<span class="marker"><strong>黒あるいは白と検出された領域からデータを取得して</strong></span>画像識別や画像認識などの評価を行います。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="990" height="314" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-70.png" alt="filter-processing-image1" class="wp-image-836" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-70.png 990w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-70-300x95.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-70-768x244.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-70.png 856w" sizes="(max-width: 990px) 100vw, 990px" /></figure>



<p>このようにしてデータを取得する際には、<strong>二値化画像として正確に検出されているほど</strong>画像識別や画像判別の<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>精度</strong></mark>も上がります。<br>しかし適切なフィルタ処理を行わないと、以下のように本来検出されてほしくない領域が検出されてしまうことがあります。このとき検出された領域のことを<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>ノイズ</strong></mark>と呼びます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-73.png" alt="filter-processing-image2" class="wp-image-839" width="538" height="326"/><figcaption class="wp-element-caption">ノイズの例</figcaption></figure></div>


<p>ノイズは、画像識別などにおける識別精度の低下を招く恐れがあるため、適切なフィルタ処理を選定し適用する必要があります。</p>



<div class="wp-block-jin-gb-block-icon-box jin-icon-clipboard jin-iconbox"><div class="jin-iconbox-icons"><i class="jic jin-ifont-clipboard jin-icons"></i></div><div class="jin-iconbox-main">
<p><strong>余談</strong><br>ノイズがどのようなモノか心当たりはあると思います。古い写真や、レンズにゴミが付いていたりすると画像にノイズが乗りやすいですよね、、、</p>
</div></div>



<p></p>



<h2 class="wp-block-heading">フィルタ処理でノイズを削減する</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="331" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat3-1024x331.png" alt="" class="wp-image-1131" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat3-1024x331.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat3-300x97.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat3-768x248.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat3.png 1167w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat3-1024x331.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">ブラーフィルタ（ Blur filter ）</h3>



<p>ブラー処理は、<span class="marker"><strong>画像要素（ピクセル）の平滑化を行う</strong></span>フィルタのことです。以下の図は、カーネルサイズ（処理対象の領域）が３×３とした場合のブラー処理の平滑化手法になります。</p>



<p>処理対象とする画素を、黄色く塗りつぶされた領域とします。この場合、サイズ領域の平均値を計算すると ”<strong>３</strong>” となるので中央の値が &#8220;<strong>3</strong>&#8221; に修正されます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-81.png" alt="Blur_filter-processing-image1" class="wp-image-852" width="458" height="187"/></figure></div>


<p>この処理を画像全体で行う処理を<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>ブラー（blur）処理</strong></mark>といいます。</p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">Blur処理の効果</div>
<p>画像をぼかすことができるため細かなノイズを削減できる</p>
</div>



<p>では実際にプログラムを見てみましょう！<br>画像にブラー処理を行う場合は、<strong>cv2.blur(</strong>) を用います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>Blur = cv2.blur(image,(a,b))</code></pre></div>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>処理対象とする画像を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br></strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">平滑化を行うカーネルサイズを指定：カーネルサイズは a × b となる</mark></p>
</div>



<p>実際のプログラムを見てみましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    blur=cv2.blur(image,(20,20))
    cv2.imshow(&quot;Blur filter&quot;,blur)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-full"><img decoding="async" width="990" height="390" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-74.jpg" alt="filter-processing-image3" class="wp-image-840" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-74.jpg 990w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-74-300x118.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-74-768x303.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-74.jpg 856w" sizes="(max-width: 990px) 100vw, 990px" /></figure>



<p>このような結果になります。<br>対象とする<span class="marker"><strong>カーネルサイズの領域が大きいほど画像がぼけている</strong></span>ことが分かりますね。</p>



<p></p>



<h3 class="wp-block-heading"> メディアンフィルタ（ median filter ）</h3>



<p>メディアンフィルタは、ブラーフィルタと同様に平滑化を行い画像をぼかす処理になります。ブラー処理と異なる部分は、<span class="marker"><strong>画素の中央値を適用する点</strong></span>です。</p>



<p>処理対象とする画素を黄色く塗りつぶされた領域とします。この場合、サイズ領域の中央値を計算すると ”<strong>2</strong>” となるので中央の値が &#8220;<strong>2</strong>&#8221; に修正されます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-82.png" alt="median_filter-processing-image1" class="wp-image-853" width="435" height="179"/></figure></div>


<p>では実際にプログラムを見てみましょう！<br>画像にメディアン処理を行う場合は、<strong>cv2.medianBlur()</strong> を用います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>Median = cv2.medianBlur(image,size )</code></pre></div>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>処理対象とする画像を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br></strong></mark></strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">平滑化を行うカーネルサイズを指定。中央値を用いるフィルタリング手法のため必ず奇数である必要があります。</mark></p>
</div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    median=cv2.medianBlur(image,9)
    cv2.imshow(&quot;median filter&quot;,median)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="405" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-83-1024x405.jpg" alt="filter-processing-image4" class="wp-image-854" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-83-1024x405.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-83-300x119.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-83-768x304.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-83.jpg 1127w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-83-1024x405.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<h3 class="wp-block-heading">ガウシアンフィルタ（ gaussian filter ）</h3>



<p>ガウシアンフィルタは、ブラーフィルタと同様に平滑化を行い画像をぼかす処理になります。ブラー処理と異なる部分は、<span class="marker"><strong>単に平均値をとるのではなく、処理対象画素との距離に応じて重みをつけて平滑化を行う点</strong></span>です。</p>



<p>処理対象とする画素を中央の領域とすると、<strong>中央に近いほど強い重みを掛け</strong>、<strong>中央から離れる毎に重みが小さく</strong>なるようにして、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">重み付けを行った後で平滑化を行います</mark>。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-84.png" alt="gaussian_filter-processing-image1" class="wp-image-856" width="596" height="262"/><figcaption class="wp-element-caption">ガウシアンフィルタの重み付け手法</figcaption></figure></div>


<p>では実際にプログラムを見てみましょう！<br>画像にメディアン処理を行う場合は、<strong>cv2.GaussianBlur()</strong> を用います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>Gaussian = cv2.GaussianBlur(image, ( a, b ), c, d )</code></pre></div>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>処理対象とする画像を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br></strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">平滑化を行うカーネルサイズを指定：カーネルサイズは a × b となる。</mark>(奇数を指定)</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>第三引数は、”SigmaX” （X方向の標準偏差）を指定。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第四引数</strong></mark><br>第四引数は、”SigmaY” （Y方向の標準偏差）を指定。「0」を指定した場合は、第三引数と同じ値となる。</p>
</div>



<p>実際のプログラムを見てみましょう！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    gaussina=cv2.GaussianBlur(image,(9,9),10,10)
    cv2.imshow(&quot;gaussina filter&quot;,gaussina)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-85-1024x391.jpg" alt="filter-processing-image5" class="wp-image-857" width="701" height="267"/></figure>



<p></p>



<p class="has-text-align-center has-medium-font-size"><strong>おすすめ書籍</strong></p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"Pythonで始めるOpenCV 4プログラミング","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51UKIQLB4TL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4877834613","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4877834613","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Python%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8BOpenCV%204%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"qjXty","s":"s"});</script><div id="msmaflink-qjXty">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<p></p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"Excel、データ整理＆分析、画像処理の自動化ワザを完全網羅！ 超速Python仕事術大全","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/416d63WpXbL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B09NLZFTK3","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B09NLZFTK3","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Excel%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E6%95%B4%E7%90%86%EF%BC%86%E5%88%86%E6%9E%90%E3%80%81%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96%E3%83%AF%E3%82%B6%E3%82%92%E5%AE%8C%E5%85%A8%E7%B6%B2%E7%BE%85%EF%BC%81%20%E8%B6%85%E9%80%9FPython%E4%BB%95%E4%BA%8B%E8%A1%93%E5%A4%A7%E5%85%A8\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"Vdijw","s":"s"});</script><div id="msmaflink-Vdijw">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<p></p>



<h3 class="wp-block-heading">オープニング処理（ opening processing ）</h3>



<p>オープニング処理は、二値化後の画像に用いられるノイズ削減手法であり<span class="marker"><strong>、収縮処理の後で膨張処理をかける処理</strong></span>です。画像上に散らばったノイズや、画像上に写った線などを消す効果があります。</p>



<p>二値化手法は、<a href="https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/">コチラの記事</a>で解説しています！</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>膨張処理</strong></mark><br>処理対象画素に隣接する画素に着目し、１つでも白の領域がある場合には、その画素を白に置き換える処理</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>収縮処理</strong></mark><br>処理対象画素に隣接する画素に着目し、１つでも黒の領域がある場合には、その画素を黒に置き換える処理</p>
</div>



<p>実際にオープニング処理を用いる場合には、<strong>cv2.morphology()</strong> を用います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>opening = cv2.morphologyEx ( image, cv2.MORPH_OPEN, ( a, b ))</code></pre></div>



<p></p>



<p></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="366" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-80-1024x366.png" alt="opening-processing-image1" class="wp-image-851" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-80-1024x366.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-80-300x107.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-80-768x275.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-80.png 1245w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-80-1024x366.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<h3 class="wp-block-heading">クロージング処理（ closing processing ）</h3>



<p>クロージング処理は、二値化後の画像に用いられるノイズ削減手法であり、<span class="marker"><strong>膨張処理の後で収縮処理をかける処理</strong></span>です。画像内の欠損した部分を補うことができます。</p>



<p>二値化手法は、<a href="https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/">コチラの記事</a>で解説しています！</p>



<p>実際にクロージング処理を用いる場合には、<strong>cv2.morphology()</strong> を用います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>opening = cv2.morphologyEx ( image, cv2.MORPH_CLOSE, ( a, b ))</code></pre></div>



<p></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="363" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-79-1024x363.png" alt="opening-processing-image2" class="wp-image-850" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-79-1024x363.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-79-300x106.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-79-768x272.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-79.png 1250w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-79-1024x363.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">まとめ（各フィルタ処理の比較）</h2>



<p>各平滑化処理を比較してみると以下のようになります！</p>



<p><strong>プライバシー保護</strong>などで画像全体を保護したいときは <span class="marker"><strong>”Blur”が良さそう</strong></span>ですね。ただ、機械学習に用いるための<strong>二値化画像の前処理としてフィルタ処理をかける</strong>場合には<span class="marker"><strong>”Median”もしくは”Gaussian”が良さそう</strong></span>ですね！</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="396" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-86-1024x396.jpg" alt="filter-processing-image6" class="wp-image-859" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-86-1024x396.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-86-300x116.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-86-768x297.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-86.jpg 1219w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-86-1024x396.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Blur</strong></mark>：画像全体をぼかしたいときに有効</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Median</strong></mark>：画像のエッジ部をある程度残したままぼかしたい場合に有効</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Gaussian</strong></mark>：元々の画像に近い形を保ちつつ画像をぼかしたい場合に有効</p>
</div>



<p>また、<span class="marker"><strong>オープニング処理</strong></span>と<span class="marker"><strong>クロージング処理</strong></span>を比較すると以下のようになります。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Opening</strong></mark>：散らばったノイズや、線状のノイズを削減する場合に有効</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Closing</strong></mark>：画像内の欠けた部分を補いたい場合に有効</p>
</div>



<p>実際に画像上のノイズを削減したい場合には、STEP１としてフィルタ処理を施して画像を軽くぼかし、STEP２としてあらかじめ平滑化処理を施した画像にオープニング処理あるいはクロージング処理をすることで<span class="marker"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>ノイズを効率よく削減することが可能になります</strong></mark></span>！</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="181" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-85-1024x181.png" alt="" class="wp-image-858" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-85-1024x181.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-85-300x53.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-85-768x136.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-85.png 1243w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-85-1024x181.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>余談ですが、膨張と収縮を活用すると<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>モザイク画像</strong></mark>を作成することもできます。コチラの記事で解説していますので参考にしてみて下さい！</p>



<p>参考：<a href="https://tomtom-stock.com/2022/04/03/opencv-mosaicprocessing/">[OpenCV] 画像にモザイクをかける方法</a></p>



<p>以上となります。最後まで見ていただきありがとうございました！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>[Python/OpenCV] 画像の色(RGB値)を分類・変更する方法を解説！</title>
		<link>https://tomtom-stock.com/2022/03/24/opencv-rgbchangeprocess/</link>
					<comments>https://tomtom-stock.com/2022/03/24/opencv-rgbchangeprocess/#comments</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Thu, 24 Mar 2022 12:25:54 +0000</pubDate>
				<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=795</guid>

					<description><![CDATA[本記事では、Pythonのライブラリの一つであるOpenCVを用いて画像の色（RGB値）をカンタンに変更する方法を解説します！分かりやすい一覧（ColorMap）も最後に乗せています！ OpenCVには画像の色を変化させ]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-media-text alignwide" style="grid-template-columns:28% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="384" height="400" src="https://tomtom-stock.com/wp-content/uploads/2023/02/rabit-2.png" alt="" class="wp-image-1705 size-full"/></figure><div class="wp-block-media-text__content">
<p>本記事では、Pythonのライブラリの一つであるOpenCVを用いて<span class="marker"><strong>画像の色（</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>R</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>G</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>B</strong></mark><strong>値）をカンタンに変更する方法</strong></span>を解説します！<br>分かりやすい一覧（ColorMap）も最後に乗せています！</p>
</div></div>



<p></p>



<p>OpenCVには画像の色を変化させるライブラリが<span class="marker"><strong>豊富に用意されています！</strong></span><br>本記事では以下の項目に分けて、それらのライブラリを分かりやすく説明していきたいと思います。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<ul class="wp-block-list">
<li><a href="#a-1">カラー画像の<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>R</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>G</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>B</strong></mark>を分類する方法</a></li>



<li><a href="#a-2">カラー画像の色空間を変換する方法</a></li>



<li><a href="#a-3">グレイスケール（白黒）画像に<strong>色</strong>を付ける方法</a></li>
</ul>
</div>



<p></p>



<div class="wp-block-jin-gb-block-box simple-box2">
<div class="wp-block-jin-gb-block-box simple-box7">
<ul class="wp-block-list">
<li><span class="marker"><strong>転職のためのスキルアップ</strong></span>として効率的に学びたい</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>副業</strong></mark>としてプログラミングができるようになりたい</li>



<li><span class="marker"><strong>独学での勉強に</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>限界</strong></mark><strong>を感じている</strong></span></li>
</ul>
</div>



<p>これらに該当する方は<span class="marker"><strong>プログラミングスクール</strong></span>がスキルアップの近道です！</p>



<a href="https://tomtom-stock.com/2023/02/08/program-school-recommend/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/02/2025-09-06-194514-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">【2025年最新】プログラミング上達の近道とは？スクールに通うメリットやおすすめランキングも徹底解説！</span><span class="blog-card-excerpt">プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています！特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...</span></div></div></a>



<p class="has-text-align-center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>未経験</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color"><strong>でも安心！</strong></mark><br><span class="marker"><strong>おすすめなプログラミングスクールがあります</strong></span>！</p>



<div class="wp-block-jin-gb-block-rich-button jin-flexbox"><div class="jin-shortcode-button jsb-visual-shiny jsb-hover-down"><a style="border-radius:40px;background-color:#f39800;background:linear-gradient(107.61deg, #f39800 7.99%, #fbca4d 91.12%)" href="https://tomtom-stock.com/2023/02/08/program-school-recommend/">人気のプログラミングスクールをチェック！</a><img border="0" width="1" height="1" alt=""/></div></div>
</div>



<p></p>



<h2 class="wp-block-heading">「RGB値を分類する」とは？</h2>



<figure class="wp-block-image size-full"><img decoding="async" width="952" height="312" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower.png" alt="" class="wp-image-1110" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower.png 952w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower-300x98.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower-768x252.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower.png 856w" sizes="(max-width: 952px) 100vw, 952px" /></figure>



<p>RGB値とは、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Red</strong></mark>（赤）<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>Green</strong></mark>（緑）<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>Blue</strong></mark>（青）の3色のバランスで様々な色を表す色の表現手法の一つです。それぞれ<strong>0～255</strong>の<strong>256段階</strong>で色の強弱を指定します。</p>



<p></p>



<p>【余談】様々な色のRGB値を知りたい方は、<a href="https://tomtom-stock.com/2022/02/12/python-color-code/">コチラ</a>の記事を見てみてください！</p>



<p></p>



<p>今回説明する「<strong>RGB値の分類</strong>」とは、カラー画像を<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>赤</strong></mark>と<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>緑</strong></mark>と<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>青</strong></mark>どれか一色に指定し、その色の強弱がどの程度かを表示させる方法です！</p>



<p>では、下図（上側）のような赤緑青の円が横に並んだ図を用いて詳しく説明してみます！また、その下図（下側）に示した図は、それぞれの色を抽出してみた結果です！</p>



<p>左：<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Red</strong></mark>（<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>赤</strong></mark>）の成分を抽出した結果<br>中央：<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>Green</strong></mark>（<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>緑</strong></mark>）の成分を抽出した結果<br>右：<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>Blue</strong></mark>（<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>青</strong></mark>）の成分を抽出した結果<br>※点線は実際は表示されません</p>



<p></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="484" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-67-1024x484.png" alt="rgb-change" class="wp-image-796" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-67-1024x484.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-67-300x142.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-67-768x363.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-67.png 1206w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-67-1024x484.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>この図からも分かるように、<span class="marker"><strong>指定色が強い領域ほど白に近い色</strong></span>で表され、<span class="marker"><strong>指定色が弱い領域ほど黒に近い色</strong></span>で表されます。</p>



<p>そのため指定色だけが消えたように表示されています！</p>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>次項では、この<strong>RGB値分類</strong>を実際の画像でやってみたいと思います！</p>
</div></div></div>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"Pythonで始めるOpenCV 4プログラミング","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51UKIQLB4TL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4877834613","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4877834613","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Python%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8BOpenCV%204%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"i5COp","s":"s"});</script><div id="msmaflink-i5COp">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"Excel、データ整理\u0026分析、画像処理の自動化ワザを完全網羅! 超速Python仕事術大全","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51MZ06bBAjL._SL500_.jpg","\/41oZVzBy8qL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4299021029","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4299021029","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Excel%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E6%95%B4%E7%90%86%26%E5%88%86%E6%9E%90%E3%80%81%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96%E3%83%AF%E3%82%B6%E3%82%92%E5%AE%8C%E5%85%A8%E7%B6%B2%E7%BE%85!%20%E8%B6%85%E9%80%9FPython%E4%BB%95%E4%BA%8B%E8%A1%93%E5%A4%A7%E5%85%A8\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"iH4wF","s":"xs"});</script><div id="msmaflink-iH4wF">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<h2 class="wp-block-heading" id="a-1">RGB値を分類してみよう</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="383" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-1024x383.png" alt="" class="wp-image-1100" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-1024x383.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-300x112.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-768x287.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat.png 1082w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-1024x383.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">RBG値の分類手法</h3>



<p>では実際に画像を<strong>RGB</strong>の各成分で分離してみましょう！<br>今回は、色が分かりやすいように以下の画像を対象として分類していきたいと思います。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="628" height="418" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-68.png" alt="rgb-change2" class="wp-image-800" style="width:304px;height:203px"/></figure></div>


<p>まず初めに、<strong>cv2.splitメソッド</strong>を用いて原画像を<span class="marker"><strong>RGB値に分類</strong></span>します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>rgb = cv2.split ( image )</code></pre></div>



<p></p>



<p>これによって原画像が<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>赤</strong></mark>、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>緑</strong></mark>、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>青</strong></mark>の各成分ごとに分離されます。そして、分類されたそれぞれのデータを<strong>表示したり保存したり</strong>するため、<span class="marker"><strong>各成分ごとにインスタンスを作成します</strong></span>！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>    red=rgb<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank02.png" />
    green=rgb<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank01.png" />
    blue=rgb[0]</code></pre></div>



<p>ここで、配列<strong>rgb [ ] </strong>は<strong>cv2.split()</strong>で分類した<span class="marker"><strong>各色の画像を呼び出すため</strong></span>のコードです。</p>



<div class="wp-block-jin-gb-block-icon-box jin-icon-checkcircle jin-iconbox"><div class="jin-iconbox-icons"><i class="jic jin-ifont-checkcircle jin-icons"></i></div><div class="jin-iconbox-main">
<ul class="wp-block-list">
<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>Blue</strong></mark>が格納されたデータ　→　rgb [ 0 ]</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>Green</strong></mark>が格納されたデータ　→　rgb [ 1 ]</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Red</strong></mark>が格納されたデータ　→　rgb [ 2 ]</li>
</ul>
</div></div>



<p></p>



<p>OpenCVでは、画像の色を<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>B</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>G</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>R</strong></mark>の順で認識するため<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>青</strong></mark>がrgb[ 0 ]<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-black-color">、</mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>緑</strong></mark>がrgb[ 1 ]、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>赤</strong></mark>がrgb[ 2 ]という順番で配列に格納されています。</p>



<p></p>



<h3 class="wp-block-heading">RGB値を実際に分類してみる</h3>



<p>実際のプログラムは以下の通りです！<br>画像の<strong>書き込み</strong>及び<strong>保存方法</strong>は、以下を参照してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\pencil.jpg&quot;)
    #画像をrgb値に変換
    rgb=cv2.split(image)
    #それぞれの色のインスタンスを作成
    red=rgb<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank02.png" />
    green=rgb<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank01.png" />
    blue=rgb[0]

    #画像の保存
    cv2.imwrite(&quot;C:\Imagefile\blue.jpg&quot;,blue)
    cv2.imwrite(&quot;C:\Imagefile\green.jpg&quot;,green)
    cv2.imwrite(&quot;C:\Imagefile\red.jpg&quot;,red)

    #画像の表示
    cv2.imshow(&quot;red&quot;, red)
    cv2.imshow(&quot;green&quot;, green)
    cv2.imshow(&quot;blue&quot;, blue)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="532" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-68-1-1024x532.jpg" alt="rgb-change3" class="wp-image-799" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-68-1-1024x532.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-68-1-300x156.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-68-1-768x399.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-68-1.jpg 1317w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-68-1-1024x532.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>このように原画像が<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>R</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>G</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>B</strong></mark>の各色に分類されました！</p>



<p>まず、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Red</strong></mark>を抽出した画像に着目すると<span class="marker"><strong>赤に近い色ほど白っぽく</strong></span>なり<span class="marker"><strong>赤から遠い色ほど黒っぽく</strong></span>なっていることが分かります。</p>



<p>同様に<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>Green</strong></mark>と<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>Blue</strong></mark>について見ると、<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-green-cyan-color"><strong>Green</strong></mark>を抽出した画像では、<span class="marker"><strong>緑に近づくほど白っぽく</strong></span>、<span class="marker"><strong>緑から遠いほど黒っぽく</strong></span>なっていて、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-cyan-blue-color"><strong>Blue</strong></mark>を抽出した画像では、<span class="marker"><strong>青に近づくほど白く</strong></span>、<span class="marker"><strong>青から遠いほど黒く</strong></span>なっていることが分かります。</p>



<p></p>



<h2 class="wp-block-heading" id="a-2">RGB値を変化させてみよう</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="334" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png" alt="" class="wp-image-1170" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-300x98.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-768x250.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2.png 1205w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_lookingcat2-1024x334.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">カラー画像の色空間を変換する</h3>



<p>次は、画像の<strong>RGB値</strong>を自動的に変換させて表示する方法について説明します！<strong>RGB値</strong>を変換するためには、OpenCVのメソッド <span class="marker"><strong>cv2.cvtColor()</strong></span> を利用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>cv2.cvtColor ( image , cv2.COLOR_BGR2GRAY )</code></pre></div>



<p></p>



<p><strong>cv2.cvtColor()</strong>の<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark>には、変換対象となる画像を選択し、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark>にはOpenCVに用意されているライブラリの中から好きな変換手法を選択します！</p>



<p>今回は以下のプログラムにも示したような6つの変換手法を紹介します！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\pencil.jpg&quot;)
#色空間の変更
    rgb1 = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    rgb2 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    rgb3 = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
    rgb4 = cv2.cvtColor(image, cv2.COLOR_BGR2HLS)
    rgb5 = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
    rgb6 = cv2.cvtColor(image, cv2.COLOR_RGB2LUV)
#画像の表示
    cv2.imshow(&quot;No.1&quot;, rgb1)
    cv2.imshow(&quot;No.2&quot;, rgb2)
    cv2.imshow(&quot;No.3&quot;, rgb3)
    cv2.imshow(&quot;No.4&quot;, rgb4)
    cv2.imshow(&quot;No.5&quot;, rgb5)
    cv2.imshow(&quot;No.6&quot;, rgb6)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="628" height="418" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-68.png" alt="rgb-change4" class="wp-image-800" style="width:234px;height:156px"/><figcaption class="wp-element-caption">原画像</figcaption></figure></div>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="276" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-9-1024x276.jpg" alt="rgb-change5" class="wp-image-819" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-9-1024x276.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-9-300x81.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-9-768x207.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-9.jpg 1341w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-9-1024x276.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="283" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-8-1024x283.jpg" alt="rgb-change6" class="wp-image-818" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-8-1024x283.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-8-300x83.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-8-768x212.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-8.jpg 1339w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-8-1024x283.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>このように元々の画像と色のパターンがそれぞれの変換手法によって異なる色空間に変わりました！</p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p><strong>BGR2RGB</strong>は赤が青っぽく、青が赤っぽく変わっていますね！<br><strong>BGR2LUV</strong>はファンシーな感じになりました(笑)</p>
</div></div></div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<a href="//af.moshimo.com/af/c/click?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4877834613" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img decoding="async" src="https://images-fe.ssl-images-amazon.com/images/I/51UKIQLB4TL._SL160_.jpg" alt="" style="border: none;"><br>Pythonで始めるOpenCV 4プログラミング</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" loading="lazy" width="1" height="1" style="border: none;">
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<a href="//af.moshimo.com/af/c/click?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4798071552" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img decoding="async" src="https://images-fe.ssl-images-amazon.com/images/I/51VLEXd0y3L._SL160_.jpg" alt="" style="border: none;"><br>現場ですぐに使える！ 最新Pythonプログラミング逆引き大全450の極意</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=3290641&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" loading="lazy" width="1" height="1" style="border: none;">
</div>
</div>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4709394586832392"
     crossorigin="anonymous"></script>
<!-- new_responsive -->
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4709394586832392"
     data-ad-slot="4790377420"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h3 class="wp-block-heading" id="a-3">グレイスケール（白黒）画像に色をつける方法</h3>



<p>最後は、<span class="marker"><strong>グレイスケール（白黒）画像に色をつける</strong></span>方法を紹介します！グレイスケール画像に色を付けるためのライブラリがOpenCVには準備されています。</p>



<p>それが <span class="marker"><strong>cv2.applyColorMap()</strong></span> です！<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark>には、色をつけたいグレイスケール画像を選択肢、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark>にはOpenCVに用意されている着色方法の中から好きなものを選択します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>    cv2.applyColorMap ( image , cv2.COLORMAP_SUMMER )</code></pre></div>



<p></p>



<p>では、OpenCVを用いて色をつけるための関数をいくつか紹介していきます！</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="612" height="569" src="https://tomtom-stock.com/wp-content/uploads/2022/03/cat-gray.jpg" alt="rgb-change7" class="wp-image-820" style="width:227px;height:211px"/><figcaption class="wp-element-caption">原画像</figcaption></figure></div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="380" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1024x380.jpg" alt="rgb-change8" class="wp-image-804" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1024x380.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-300x111.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-768x285.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69.jpg 1241w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1024x380.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="378" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1-1024x378.jpg" alt="rgb-change9" class="wp-image-805" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1-1024x378.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1-300x111.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1-768x284.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1.jpg 1242w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-1-1024x378.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="376" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-2-1024x376.jpg" alt="rgb-change10" class="wp-image-806" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-2-1024x376.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-2-300x110.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-2-768x282.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-2.jpg 1248w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-2-1024x376.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="371" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-3-1024x371.jpg" alt="rgb-change11" class="wp-image-807" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-3-1024x371.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-3-300x109.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-3-768x278.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-3.jpg 1248w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-3-1024x371.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="376" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-4-1024x376.jpg" alt="rgb-change12" class="wp-image-808" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-4-1024x376.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-4-300x110.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-4-768x282.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-4.jpg 1249w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-4-1024x376.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="373" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-5-1024x373.jpg" alt="rgb-change13" class="wp-image-809" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-5-1024x373.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-5-300x109.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-5-768x280.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-5.jpg 1243w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-5-1024x373.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="384" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-6-1024x384.jpg" alt="rgb-change14" class="wp-image-810" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-6-1024x384.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-6-300x112.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-6-768x288.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-6.jpg 1246w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-6-1024x384.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="387" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-7-1024x387.jpg" alt="rgb-change15" class="wp-image-811" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-7-1024x387.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-7-300x113.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-7-768x290.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-7.jpg 1246w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-69-7-1024x387.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>このような感じで着色できました！<br>それぞれ色のつけ方に特徴があって面白いですね！</p>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>”<strong>RAINBOW</strong>” は、色空間が非常に面白い感じになりました！<br>”<strong>JET</strong>” は<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>サーモグラフィー</strong></mark>みたいな画像になりました(笑)</p>
</div></div></div>



<p></p>



<p>以上となります！<br><span class="marker"><strong>ぜひお気に入りの変換方法が見つけてみて下さい！</strong></span><br>最後まで見ていただきありがとうございました。</p>



<p>画像処理において、ノイズを削減する方法も解説していますので参考にしてみて下さい！</p>



<p>参考：<a href="https://tomtom-stock.com/2022/03/27/opencv-filterprocessing/">[OpenCV] フィルタ処理を用いてノイズを除去する方法</a></p>



<p></p>



<p class="has-text-align-center has-medium-font-size"><strong>おすすめ記事</strong></p>



<a href="https://tomtom-stock.com/2023/02/08/program-school-recommend/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/02/2025-09-06-194514-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">【2025年最新】プログラミング上達の近道とは？スクールに通うメリットやおすすめランキングも徹底解説！</span><span class="blog-card-excerpt">プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています！特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...</span></div></div></a>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2022/03/24/opencv-rgbchangeprocess/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>[OpenCV] 画像の二値化処理を初心者にも分かりやすく徹底解説！</title>
		<link>https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/</link>
					<comments>https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/#comments</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Sun, 20 Mar 2022 10:04:46 +0000</pubDate>
				<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=755</guid>

					<description><![CDATA[本記事では、機械学習などでよく利用される二値化処理に焦点をあてて、様々な手法を分かりやすく解説していきたいと思います！ 近年注目を集めてきている機械学習やディープラーニング等で行われる画像識別や特徴点抽出などでは、二値化]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-media-text alignwide" style="grid-template-columns:25% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="383" height="400" src="https://tomtom-stock.com/wp-content/uploads/2023/02/kouyou_dog-1.png" alt="" class="wp-image-1719 size-full"/></figure><div class="wp-block-media-text__content">
<p>本記事では、機械学習などでよく利用される<span class="marker"><strong>二値化処理に焦点をあてて</strong></span>、様々な手法を分かりやすく解説していきたいと思います！</p>
</div></div>



<p></p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">二値化処理とは</div>
<p>画像処理の一種で、画像の色調を<span class="marker"><strong>白黒へと変換する処理</strong></span>のことです。</p>



<p>二値化処理は、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>画像のノイズ削減</strong></mark>や<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>濃淡を強調させる</strong></mark>ために用いられることが多いです。</p>
</div>



<p>近年注目を集めてきている<strong>機械学習やディープラーニング</strong>等で行われる<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>画像識別</strong></mark>や<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>特徴点抽出</strong></mark>などでは、二値化像からデータを取得しています。</p>



<p>そのため二値化処理はなくてはならない画像処理手法の１つです！<br>では分かりやすく解説していきます。</p>



<p></p>



<div class="wp-block-jin-gb-block-box simple-box2">
<div class="wp-block-jin-gb-block-box simple-box7">
<ul class="wp-block-list">
<li><span class="marker"><strong>転職のためのスキルアップ</strong></span>として効率的に学びたい</li>



<li><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>副業</strong></mark>としてプログラミングができるようになりたい</li>



<li><span class="marker"><strong>独学での勉強に</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>限界</strong></mark><strong>を感じている</strong></span></li>
</ul>
</div>



<p>これらに該当する方は<span class="marker"><strong>プログラミングスクール</strong></span>がスキルアップの近道です。</p>



<a href="https://tomtom-stock.com/2023/02/08/program-school-recommend/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/02/2025-09-06-194514-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">【2025年最新】プログラミング上達の近道とは？スクールに通うメリットやおすすめランキングも徹底解説！</span><span class="blog-card-excerpt">プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています！特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...</span></div></div></a>



<p class="has-text-align-center"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>未経験</strong></mark><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-amber-color"><strong>でも安心！</strong></mark><br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>学生</strong></mark>や<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>30代の方</strong></mark>にも<span class="marker"><strong>おすすめなプログラミングスクールがあります</strong></span>！</p>



<div class="wp-block-jin-gb-block-rich-button jin-flexbox"><div class="jin-shortcode-button jsb-visual-shiny jsb-hover-down"><a style="border-radius:40px;background-color:#f39800;background:linear-gradient(107.61deg, #f39800 7.99%, #fbca4d 91.12%)" href="https://tomtom-stock.com/2023/02/08/program-school-recommend/">人気のプログラミングスクールをチェック！</a><img border="0" width="1" height="1" alt=""/></div></div>
</div>



<h2 class="wp-block-heading">準備：画像の読み込みと書き込み</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="337" src="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png" alt="" class="wp-image-1168" srcset="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-300x99.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-768x253.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat.png 1200w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat-1024x337.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">画像を読み込む方法</h3>



<p>OpenCVを用いて画像を読み込む際には、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.imread()</strong></mark>を使用します。引数には読み込みたい画像の保存先URLを入力しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>インスタンス名 = cv2.imread ( ” C:￥image.jpg &quot; ) #この場合はCドライブ内のimage.jpgという画像を指定</code></pre></div>



<p></p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5-2.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>こうすることで、指定したインスタンスに画像情報を持たせることができます！</p>
</div></div></div>



<p></p>



<h3 class="wp-block-heading">画像を保存したい場合</h3>



<p>OpenCVを用いて画像処理を行った後の画像データを保存したい場合には、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.imwrite()</strong></mark>を利用します！</p>



<p>画像処理を行った次の行に挿入することで画像を保存することができます。書き方は以下の通りです。第一引数（adress）には<strong>保存先URL</strong>、第二引数に<strong>保存したい画像データ</strong>を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>cv2.imwrite(&quot;address&quot;, 画像名)</code></pre></div>



<p></p>



<h3 class="wp-block-heading">画像が読み込めない場合にプログラムを終了させる方法</h3>



<p>画像が読み込めない場合に、プログラムの<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>RUN</strong></mark>を終了させたい場合には以下のコードをプログラムに追加します。</p>



<p><span class="marker"><strong>ファイル読み込みを行う行の下に挿入してみて下さい！</strong></span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>    if image is None:
        print(&quot;ファイルが見つかりません&quot;)
        import sys
        sys.exit()</code></pre></div>



<h2 class="wp-block-heading">グレイスケールで表示させる方法</h2>



<p>グレイスケールとは、画像を<strong>白と黒の濃淡のみ</strong>で表示させる手法です。<br>画像をグレイスケールに変更する場合は、<strong>cv2.cvtColor</strong>メソッドにある<span class="marker"><strong>cv2.COLOR_RGB2GRAY関数</strong></span>を利用します。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark>には、グレイスケールに変更したい画像を指定します。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark>には、関数を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>cv2.cvtColor ( image , cv2.COLOR_RGB2GRAY )</code></pre></div>



<p></p>



<p>では実際に画像をグレースケールに変更してみしょう！<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>なお、&#8221;\&#8221; は &#8220;半角＼&#8221; を示しています。</strong></mark> </p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)
#グレイスケールへ変換
    gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    cv2.imwrite(&quot;C:\Imagefile\cat-gray.jpg&quot;,gray)
    cv2.imshow(&quot;gray1&quot;,gray)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-40-1.jpg" alt="thresh-image1" class="wp-image-756" width="580" height="268"/></figure></div>


<p>このように画像の色がグレイスケールに変更されました！</p>



<p>画像が自動で白黒に変更されるので非常に便利ですね！次は閾値処理という手法を紹介したいと思います！</p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>閾値処理は画像を白黒へ二値化するための処理です！</p>
</div></div></div>



<p></p>



<h2 class="wp-block-heading">閾値（しきい値）処理で二値化してみよう</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="373" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-1024x373.png" alt="" class="wp-image-1101" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-1024x373.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-300x109.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-768x280.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat.png 1048w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_mike_cat-1024x373.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">二値化処理とは</h3>



<p>二値化処理とは、画像を以下のような<strong>白黒画像</strong>に変換する手法です。白黒に変換する方法は、グレイスケール画像の<span class="marker"><strong>諧調（輝度）</strong></span>を閾値を指定して<strong>黒（0）</strong>か<strong>白（255）</strong>かで表す画像処理手法です。（下図は閾値を130に指定）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-41.png" alt="thresh-image2" class="wp-image-759" width="235" height="219"/></figure></div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-43.png" alt="thresh-image3" class="wp-image-761" width="309" height="120"/></figure></div>


<p></p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">グレイスケール画像とは？</div>
<p>グレイスケール画像は、原画像の色分布をもとにして白黒の輝度（0～255の計256段階）で表示した画像のこと</p>
</div>



<p></p>



<div class="wp-block-jin-gb-block-box-with-headline kaisetsu-box5"><div class="kaisetsu-box5-title">閾値（しきい値）とは？</div>
<p>二値化画像を作成する場合には、0～255の計256段階の諧調で表示されたグレイスケール画像の、どの値を境界として白黒に分けるかを指定する。この時指定した値を閾値（しきい値）という</p>
</div>



<p></p>



<h3 class="wp-block-heading">二値化の基本的な仕組み</h3>



<p>閾値画像処理をする上で、<strong>二値化の仕組み</strong>を知っておくことは非常に大切です。</p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>今回は、二値化手法の基本的な仕組みを分かりやすく解説していきたいと思います！</p>
</div></div></div>



<p>まず、グラフの下に表示されたようなグレースケールで表される画像があるとします。すると、この画像の<strong>輝度</strong>は下図に示したグラフのように表現できます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-45.png" alt="thresh-process" class="wp-image-763" width="301" height="224"/></figure></div>


<p>この画像に対して、<strong>閾値を130に設定</strong>して二値化をしてみます。閾値を130に設定すると、<span class="marker"><strong>輝度が130よりも高いエリアは白</strong></span>で表示され、<span class="marker"><strong>130よりも低いエリアは黒</strong></span>に表示されて二値化されます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-48-1024x446.png" alt="thresh-process2" class="wp-image-766" width="487" height="211"/></figure></div>


<p>このようなシステムで二値化を行うため、<span class="marker"><strong>画像全体の輝度が</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>平滑</strong></mark><strong>である必要があります</strong></span>。輝度に偏りがある場合には、正確に二値化を行うことができないため、前処理として<strong>輝度平滑</strong>化処理を施す必要があります。</p>



<p>まず初めに、画像上のノイズを低減させるために<span class="marker"><em><strong>フィルタ処理（ぼか</strong></em><strong>し）</strong></span>をかけます。</p>



<p>その後、特殊な環境でない限り、通常は<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>少なからず輝度値に偏りがある</strong></mark>ため<span class="marker"><strong>輝度平滑化処理</strong></span>を行うか、後半部分で説明する<span class="marker"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>適応的二値化処理</strong></mark></span>を行います。</p>



<p></p>



<p class="has-text-align-center has-medium-font-size"><strong>おすすめ書籍</strong></p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"Pythonで始めるOpenCV 4プログラミング","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51UKIQLB4TL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4877834613","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4877834613","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Python%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8BOpenCV%204%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"qjXty","s":"s"});</script><div id="msmaflink-qjXty">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<p></p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識","b":"オライリー・ジャパン","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51PnbcCkunL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4873118379","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4873118379","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E8%A9%B3%E8%A7%A3%20OpenCV%203%20%E2%80%95%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%83%BB%E8%AA%8D%E8%AD%98\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"iRgo6","s":"s"});</script><div id="msmaflink-iRgo6">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<p></p>



<h2 class="wp-block-heading">OpenCVによる二値化手法一覧</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="350" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_readingcat-1024x350.png" alt="" class="wp-image-1172" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_readingcat-1024x350.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_readingcat-300x103.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_readingcat-768x262.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_readingcat.png 1188w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_readingcat-1024x350.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>ここからは実際に画像を白と黒へ二値化する方法について解説していきます。</p>



<p><strong>OpenCV</strong>において、二値化をするために用いられる手法は以下の通りとなっています。次項でそれぞれ詳しく解説していきます！</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<ol class="wp-block-list">
<li><strong><a href="#a-1">cv2.THRESH_BINARY</a></strong></li>



<li><strong><a href="#a-2">cv2.THRESH_BINARY_INV</a></strong></li>



<li><strong><a href="#a-3">cv2.THRESH_TRUNC</a></strong></li>



<li><strong><a href="#a-4">cv2.THRESH_TOZERO</a></strong></li>



<li><strong><a href="#a-5">cv2.THRESH_TOZERO_INV</a></strong></li>
</ol>
</div>



<p></p>



<h3 class="wp-block-heading" id="a-1">cv2.THRESH_BINARY</h3>



<p>まずは、一般的な二値化関数である<strong>cv2.THRESH_BINARY</strong>関数を見てみましょう！</p>



<p>プログラムと実行結果は以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    ret,thresh=cv2.threshold(gray,130,255,cv2.THRESH_BINARY)
    #cv2.imwrite(&quot;C:\Imagefile\cat-gray.jpg&quot;,thresh)
    cv2.imshow(&quot;gray1&quot;,thresh)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-49.png" alt="thresh-image4" class="wp-image-768" width="227" height="211"/></figure></div>


<p>このような形で二値化画像が表示されました！<br>実際の<strong>cv2.THRESH_BINARY</strong>関数は以下のように書かれており、引数にはそれぞれ以下を指定します。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>二値化させたいグレースケール画像</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br>閾値を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>0～255段階の諧調の内で、上限値を指定</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>cv2.threshold(gray,130,255,cv2.THRESH_BINARY)</code></pre></div>



<p></p>



<p>では実際に<span class="marker"><strong>第二引数</strong></span>と<span class="marker"><strong>第三引数</strong></span>を変化させた場合の二値化像の変化を見てみましょう！</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="275" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-61-1024x275.png" alt="thresh-image5" class="wp-image-780" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-61-1024x275.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-61-300x81.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-61-768x206.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-61.png 1170w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-61-1024x275.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>


<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>第２引数（閾値）の値を小さくすると、白だと判定される領域が広くなっていますね！</p>
</div></div></div>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="276" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-60-1024x276.png" alt="thresh-image6" class="wp-image-779" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-60-1024x276.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-60-300x81.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-60-768x207.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-60.png 1169w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-60-1024x276.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>第３引数のみを変更した結果</strong></figcaption></figure></div>


<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>第３引数の値を小さくすると、白と判別されたエリアの色が暗くなっていますね！</p>
</div></div></div>



<p></p>



<h3 class="wp-block-heading" id="a-2">cv2.THRESH_BINARY_INV</h3>



<p><strong>cv2.THRESH_BINARY_INV</strong>関数は、<strong>cv2.THRESH_BINARY</strong>関数で判定した、白と黒の領域を反転させて表示させる手法です！</p>



<p><strong>cv2.threshold</strong>メソッド内の第４引数に、<strong>cv2.THRESH_BINARY_INV</strong>を指定して利用します。実行結果は以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>ret,thresh=cv2.threshold(gray,130,255,cv2.THRESH_BINARY_INV)</code></pre></div>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="834" height="231" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-59.png" alt="thresh-image7" class="wp-image-778"/><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="844" height="236" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-58.png" alt="thresh-image8" class="wp-image-777"/><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>


<p></p>



<h3 class="wp-block-heading" id="a-3">cv2.THRESH_TRUNC</h3>



<p><strong>cv2.THRESH_TRUNCのTRUNC</strong>は、<span class="marker"><strong>Truncation</strong></span>のことで閾値を切り捨てるということを意味します。</p>



<p>そのため第２引数で指定した閾値以上の領域は<span class="marker"><strong>閾値で指定した値がそのまま適用されます</strong></span>。<br>そして最も重要なのは、閾値で指定した値よりも下の領域は二値化がされず、<span class="marker"><strong>そのままグレースケールで表示される</strong></span>ということです！</p>



<p>使い方は、<strong>cv2.thresholdメソッド</strong>内の第４引数に、<strong>cv2.THRESH_BINARY_INV</strong>を指定して利用します。実行結果は以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>ret,thresh=cv2.threshold(gray,200,200,cv2.THRESH_TRUNC)</code></pre></div>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>二値化させたいグレースケール画像</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br>閾値を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>値を変えても変化が無かったので今回は特に値を変更させる必要はなさそうです。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="295" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-57-1024x295.png" alt="thresh-image9" class="wp-image-776" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-57-1024x295.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-57-300x86.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-57-768x221.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-57.png 1156w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-57-1024x295.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>


<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>画像が明るすぎるけど、グレースケールはそのままで表示させたいという場合に使えますね！</p>
</div></div></div>



<p></p>



<h3 class="wp-block-heading" id="a-4">cv2.THRESH_TOZERO</h3>



<p><strong>cv2.THRESH_TOZERO</strong>関数は、<strong>cv2.THRESH_TRUNC</strong>の逆のことをしている関数です！</p>



<p>つまり第２引数で指定した閾値よりも輝度値が下の領域には、<span class="marker"><strong>閾値で指定した値を適用します</strong></span>。そして、閾値で指定した輝度値よりも上の領域は、<span class="marker"><strong>グレースケールのままで表示させる</strong></span>というものです。</p>



<p>使い方は、<strong>cv2.thresholdメソッド</strong>内の第４引数に、<strong>cv2.THRESH_TOZERO</strong>を指定して利用します。実行結果は以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ret,thresh=cv2.threshold(gray,130,10,cv2.THRESH_TOZERO)</code></pre></div>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>二値化させたいグレースケール画像</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br>閾値を指定</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>値を変えても変化が無かったので今回は特に値を変更させる必要はなさそうです。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="277" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-56-1024x277.png" alt="thresh-image10" class="wp-image-775" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-56-1024x277.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-56-300x81.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-56-768x207.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-56.png 1177w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-56-1024x277.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>


<p></p>



<h3 class="wp-block-heading" id="a-5">cv2.THRESH_TOZERO_INV</h3>



<p><strong>cv2.THRESH_TOZERO_INV</strong>関数は、<strong>cv2.THRESH_TOZERO</strong>関数で判定した、白と黒の領域を反転させて表示させる手法です！</p>



<p><strong>cv2.thresholdメソッド</strong>内の第４引数に、<span class="marker"><strong>cv2.THRESH_TOZERO_IN</strong></span>Vを指定して利用します。実行結果は以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>ret,thresh=cv2.threshold(gray,130,255,cv2.THRESH_TOZERO_INV)</code></pre></div>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="276" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-62-1024x276.png" alt="thresh-image11" class="wp-image-781" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-62-1024x276.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-62-300x81.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-62-768x207.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-62.png 1172w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-62-1024x276.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>第二引数のみを変更した結果</strong></figcaption></figure></div>


<p></p>



<p>【余談】他にも<a href="https://tomtom-stock.com/2023/01/20/programming_recom_gadget/" data-type="post" data-id="1204">プログラミングに役立つガジェット</a>なども紹介していますので是非参考にしてみてください～！</p>



<p></p>



<h2 class="wp-block-heading">適応的閾値処理（adaptive threshold）</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="383" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-1024x383.png" alt="" class="wp-image-1100" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-1024x383.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-300x112.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-768x287.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat.png 1082w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat-1024x383.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">適応的二値化とは</h3>



<p>二値化処理には、<strong>閾値処理</strong>の他に<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>適応的二値化処理（adaptive threshold）</strong></mark>という手法があります。</p>



<p><strong>適応的二値化</strong>とは、画像全体に対して一定の閾値を用いて二値化するのではなく、<span class="marker"><strong>画素ごとで適切な閾値を用いて二値化する手法</strong></span>のことです。</p>



<p><strong>このような仕組みで二値化を行うため、</strong><span class="marker"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>輝度を平滑化しなくても正確に</strong></mark></span><strong>二値化を行うことができます</strong>！</p>



<p>そしてこの適応的二値化で扱える関数のうち、今回紹介するのは以下の2つです。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<ol class="wp-block-list">
<li><strong><a href="#b-1">OTSU</a></strong></li>



<li><strong><a href="#b-2">cv2.ADAPTIVE_THRESH_MEAN_C</a></strong></li>



<li><strong><a href="#b-3">cv2.ADAPTIVE_THRESH_GAUSSIAN_C</a></strong></li>
</ol>
</div>



<p></p>



<h3 class="wp-block-heading" id="b-1">OTSU</h3>



<p><strong>OTSU</strong>は、<strong>大津の二値化</strong>と呼ばれており、自動的に閾値を設定していく適応的閾値処理の一つです。このOTSUを用いる場合には、プログラムを以下のように書きます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    ret,thresh = cv2.threshold(gray,0,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    #cv2.imwrite(&quot;C:\Imagefile\cat-gray.jpg&quot;,thresh)
    cv2.imshow(&quot;gray1&quot;,thresh)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="380" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-66-1024x380.png" alt="thresh-image12" class="wp-image-785" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-66-1024x380.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-66-300x111.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-66-768x285.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-66.png 1065w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-66-1024x380.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><strong>第３引数のみを変更した結果</strong></figcaption></figure></div>


<p>第２引数は変更しても変化がなかったので特に指定する必要はないと思います。</p>



<p></p>



<h3 class="wp-block-heading" id="b-2">cv2.ADAPTIVE_THRESH_MEAN_C</h3>



<p><strong>cv2.ADAPTIVE_THRESH_MEAN_C</strong>を用いて適応的二値化を行った結果を以下に示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code> thresh = cv2.adaptiveThreshold ( gray , 160 , cv2.ADAPTIVE_THRESH_MEAN_C , cv2.THRESH_BINARY , 7 , 8 )</code></pre></div>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第一引数</strong></mark><br>二値化させたいグレースケール画像</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第二引数</strong></mark><br>条件（第三引数）を満たすピクセルに割り当てられる輝度値</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第三引数</strong></mark><br>適応的二値化アルゴリズムの指定。<br>&#8220;cv2.ADAPTIVE_THRESH_MEAN_C&#8221; あるいは ”cv2.ADAPTIVE_THRESH_GAUSSIAN_C”</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第四引数</strong></mark><br>閾値処理の種類を指定。<br>&#8220;cv2.THRESH_BINARY&#8221; あるいは &#8220;cv2.THRESH_BINARY_INV&#8221;</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第五引数</strong></mark><br>どれくらいの画素数を一つの領域とするか（近傍領域）の指定。<br>奇数のみで指定（通常3，5，7などが用いられる）。<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>偶数を入力するとエラーがでる</strong></mark>。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>第六引数</strong></mark><br>平均または加重平均から減算される定数</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    gray=cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    thresh=cv2.adaptiveThreshold(gray,160,cv2.ADAPTIVE_THRESH_MEAN_C,
                                     cv2.THRESH_BINARY,7,8)
    cv2.imshow(&quot;gray1&quot;,thresh)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-63-1024x397.png" alt="thresh-image13" class="wp-image-782" width="621" height="240"/><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>


<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>適応的二値化後の輝度値の上限（白で表される部分）の色味が変わっていますね！</p>
</div></div></div>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-64-1024x381.png" alt="thresh-image14" class="wp-image-783" width="652" height="242"/><figcaption class="wp-element-caption"><strong>第５引数のみを変更した結果</strong></figcaption></figure></div>


<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>第５引数の値を変化させると、黒で表される領域のサイズが変わっていますね！引数の値が小さい方が<strong>一つ一つの領域が細かく</strong>なっています！</p>
</div></div></div>



<p></p>



<h3 class="wp-block-heading" id="b-3">cv2.ADAPTIVE_THRESH_GAUSSIAN_C</h3>



<p><strong>cv2.ADAPTIVE_THRESH_GAUSSIAN_C</strong>を用いて適応的二値化を行った結果を以下に示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code> thresh = cv2.adaptiveThreshold ( gray , 160 , cv2.ADAPTIVE_THRESH_GAUSSIAN_C , cv2.THRESH_BINARY , 7 , 8 )</code></pre></div>



<p>（実行結果）</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-65-1024x383.png" alt="thresh-image15" class="wp-image-784" width="640" height="239"/><figcaption class="wp-element-caption"><strong>第２引数のみを変更した結果</strong></figcaption></figure></div>


<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>先ほどと同様に、適応的二値化後の輝度値の上限（白で表される部分）の色味が変わっていますね！</p>
</div></div></div>



<p></p>



<h2 class="wp-block-heading">どの二値化手法が最も優れているのか</h2>



<p>最後に、どの二値化手法を用いればよいのかお話していきたいと思います！</p>



<p>結論からお話ししますと、、、、、、</p>



<p class="has-medium-font-size"><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>状況に応じて適したものを選ぶしかない！</strong></mark>です</p>



<p>二値化画像の用途や、撮影機器、機械学習にかける場合には、そのAIなどの外部要因によって<strong>優れている二値化手法は</strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>変わって</strong></mark><strong>きます</strong>。</p>



<p>そのため画像を二値化して、何をするか明確になったときに色々と試してみて精度がもっともよいと思われる二値化手法を用いるのが良いと思います。</p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>余談ではありますが、ボクは二値化処理に<strong>OTSU</strong>を用いることが多いです！</p>
</div></div></div>



<p></p>



<p>以上となります。最後まで見ていただきありがとうございました！<br><span class="marker"><strong><a href="https://tomtom-stock.com/2022/03/24/opencv-rgbchangeprocess/">色（RGB値）の変換方法</a></strong></span>や<span class="marker"><strong><a href="https://tomtom-stock.com/2022/03/13/python-bookreview-syosinnsya/">Python学習に役立つおすすめ書籍</a></strong></span>も紹介していますので是非参考にしてみて下さい！</p>



<a href="https://tomtom-stock.com/2023/01/20/programming_recom_gadget/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2023/01/gadget_recommend-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング学習に役立つガジェット厳選4選！</span><span class="blog-card-excerpt">筆者が実際に使ってみて有用だと感じた、プログラミングに役立つガジェットを紹介しています！プログラミングされている方には是非とも読んでみてほしい記事です！...</span></div></div></a>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>[Python入門] OpenCVで簡単な画像処理をしてみよう！</title>
		<link>https://tomtom-stock.com/2022/03/19/opencv-imageprocessing/</link>
					<comments>https://tomtom-stock.com/2022/03/19/opencv-imageprocessing/#respond</comments>
		
		<dc:creator><![CDATA[katakuriko214]]></dc:creator>
		<pubDate>Sat, 19 Mar 2022 10:04:04 +0000</pubDate>
				<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://tomtom-stock.com/?p=730</guid>

					<description><![CDATA[近年、画像処理やディープラーニングへの関心は非常に高くなってきており、中でも画像処理は、物体認識や画像識別等をする上では欠かせない技術となっています。 本記事では、物体認識や画像認識の基礎となる画像処理のうち、反転やリサ]]></description>
										<content:encoded><![CDATA[
<p>近年、<strong>画像処理やディープラーニング</strong>への関心は非常に高くなってきており、中でも画像処理は、物体認識や画像識別等をする上では<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>欠かせない技術</strong></mark>となっています。</p>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>みなさんもスマートフォンアプリやPCで、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>写真加工</strong></mark>をした経験があると思います！</p>
</div></div></div>



<p>本記事では、物体認識や画像認識の基礎となる画像処理のうち、反転やリサイズ、トリミングなどの手法について、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>プログラムではどのように処理されているのか</strong></mark>を解説していきたいと思います！</p>



<p></p>



<p></p>



<h2 class="wp-block-heading">OpenCVとは</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="311" src="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower2-1024x311.png" alt="" class="wp-image-1112" srcset="https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower2-1024x311.png 1024w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower2-300x91.png 300w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower2-768x233.png 768w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower2.png 1080w, https://tomtom-stock.com/wp-content/uploads/2023/01/eyecatch_cat_flower2-1024x311.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><span class="marker"><strong>OpenCV</strong></span>は、画像処理を行うたに必要な膨大な関数があらかじめ用意されたライブラリのことです。</p>



<p>このOpenCVを用いることで、複雑な画像処理プログラムを構築することなく数行のコードだけで処理を行うことができます。OpenCVを用いてできる主な処理は以下の通りです。</p>



<div class="wp-block-jin-gb-block-box simple-box6">
<ul class="wp-block-list">
<li>図形描写</li>



<li>フィルタ処理</li>



<li>行列演算処理</li>



<li>グラフィックス処理</li>



<li>画像の読み込み、作成、保存、表示</li>



<li>画像の回転・上下反転・左右反転</li>



<li>モザイク処理・マスク処理・2枚の画像を合成</li>



<li>物体検出、特徴点検出</li>



<li>テンプレートマッチング</li>



<li>カメラキャプチャ、動画処理　　　　など&#8230;&#8230;</li>
</ul>
</div>



<p>図形の描写だけでなく、顔や特徴量の検出、動画編集など多岐にわたるライブラリが詰め込まれています！</p>



<p>自分自身でいろいろ触ってみると面白いですよ！</p>



<h2 class="wp-block-heading">準備</h2>



<h3 class="wp-block-heading">OpenCVのインストール</h3>



<p>OpenCVを用いて画像を読み込むためには、cv2モジュールをインストールする必要があります。そのため、コマンドプロンプトに以下のコマンドを入力し、実行してください。少し待って<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>Successfully installed</strong></mark>と表示されたらインストール完了です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>pip install opencv-python</code></pre></div>



<p></p>



<h3 class="wp-block-heading">画像を読み込む方法</h3>



<p>OpenCVを用いて画像を読み込む際には、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.imread()</strong></mark>を使用します。引数には読み込みたい画像の保存先URLを入力しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>インスタンス名 = cv2.imread ( ” C:￥image.jpg &quot; ) #この場合はCドライブ内のimage.jpgという画像を指定</code></pre></div>



<p></p>



<h3 class="wp-block-heading">画像を保存したい場合</h3>



<p>OpenCVを用いて画像処理を行った後の画像データを保存したい場合には、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.imwrite()</strong></mark>を利用します！</p>



<p>画像処理を行った次の行に挿入することで画像を保存することができます。書き方は以下の通りです。第一引数に<strong>保存先URL</strong>、第二引数に<strong>保存したい画像データ</strong>を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>cv2.imwrite(&quot;address&quot;,画像名)</code></pre></div>



<p>以下の記載の場合は、<strong>flip1という画像を</strong><span class="marker"><strong>Cドライブ、Imagefile内に</strong></span><span class="marker"><strong> </strong></span><span class="marker"><strong>”flip0” という名前のjpg画像を保存する</strong></span>という指定になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>cv2.imwrite(&quot;C:\Imagefile\flip0.jpg&quot;,flip1)</code></pre></div>



<p></p>



<h2 class="wp-block-heading">画像を反転（フリップ）する方法</h2>



<p>初めに、画像を<strong>反転（フリップ）</strong>する方法を説明していきます。<br>今回はこちらの画像を反転させてみたいと思います。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/cat-image-1.jpg" alt="flip-image" class="wp-image-732" width="262" height="244"/></figure></div>


<p>今回用いるメソッドは以下の通りです！</p>



<figure class="wp-block-table aligncenter"><table><tbody><tr><td class="has-text-align-center" data-align="center">メソッド名</td><td class="has-text-align-left" data-align="left">効果</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>cv2.flip()</strong></td><td class="has-text-align-left" data-align="left">画像を反転（フリップ）させる</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>cv2.imwrite()</strong></td><td class="has-text-align-left" data-align="left">画像を保存する</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>cv2.imshow()</strong></td><td class="has-text-align-left" data-align="left">画像を表示させる</td></tr></tbody></table></figure>



<p></p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.flip()</strong></mark><br>第一引数には、読み込んだ画像を入れたインスタンスを指定し、第二引数には<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong> -1，0，1 </strong></mark>のどれかを選択します。<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong> -1，0，1 </strong></mark>それぞれを指定した場合の結果は、下記に示しています。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.imwrite()</strong></mark><br>第一引数には、保存したいファイルの保存先と保存する画像データの名前を指定します。そして第二引数には、反転データが格納されたインスタンスを指定します。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.imshow()</strong></mark><br>第一引数には、表示画像タイトルを指定し、第二引数には表示させたい画像を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code> 　flip1=cv2.flip(image,0)
    cv2.imwrite(&quot;C:&quot;,flip1)
    cv2.imshow(&quot;flip1&quot;,flip1)</code></pre></div>



<p></p>



<p>以上のことを踏まえて、画像を反転させるプログラムを実際に見てみましょう！<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>※実際に動かす際は　</strong><span class="marker"><strong>￥→半角＼</strong></span><strong>　に置き換えてください</strong></mark></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)
#反転imwrite:0
    flip1=cv2.flip(image,0)
    cv2.imwrite(&quot;C:\Imagefile\flip0.jpg&quot;,flip1)
    cv2.imshow(&quot;flip1&quot;,flip1)
#反転imwrite:1
    flip2=cv2.flip(image,1)
    cv2.imwrite(&quot;C:\Imagefile\flip1.jpg&quot;,flip2)
    cv2.imshow(&quot;flip2&quot;,flip2)
#反転imwrite:-1
    flip3 = cv2.flip(image, -1)
    cv2.imwrite(&quot;C:\Imagefile\flip-1.jpg&quot;,flip3)
    cv2.imshow(&quot;flip3&quot;, flip3)

    if image is None:
        print(&quot;ファイルが見つかりません&quot;)
        import sys
        sys.exit()
    cv2.waitKey()
    cv2.destroyAllWindows()

if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果：画像下の数字は<strong>imwriteの第二引数で指定した値</strong>）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/cat-image-1.jpg" alt="flip-image2" class="wp-image-732" width="262" height="244"/></figure></div>


<figure class="wp-block-image size-full"><img decoding="async" width="751" height="292" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-35.png" alt="flip-image3" class="wp-image-733"/></figure>



<p></p>



<p></p>



<p class="has-text-align-center has-medium-font-size"><strong>おすすめ書籍</strong></p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"Pythonで始めるOpenCV 4プログラミング","b":"","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51UKIQLB4TL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4877834613","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4877834613","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/Python%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8BOpenCV%204%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"6soz8","s":"s"});</script><div id="msmaflink-6soz8">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<p></p>



<!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"詳解 OpenCV 3 ―コンピュータビジョンライブラリを使った画像処理・認識","b":"オライリー・ジャパン","t":"","d":"https:\/\/m.media-amazon.com","c_p":"","p":["\/images\/I\/51PnbcCkunL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4873118379","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4873118379","a_id":3290641,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E8%A9%B3%E8%A7%A3%20OpenCV%203%20%E2%80%95%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%83%BB%E8%AA%8D%E8%AD%98\/","a_id":3290639,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2}],"eid":"iRgo6","s":"s"});</script><div id="msmaflink-iRgo6">リンク</div><!-- MoshimoAffiliateEasyLink END -->



<p></p>



<h2 class="wp-block-heading">画像のリサイズ</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="301" src="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat3-1024x301.png" alt="" class="wp-image-1174" srcset="https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat3-1024x301.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat3-300x88.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat3-768x226.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat3.png 1212w, https://tomtom-stock.com/wp-content/uploads/2022/02/eyecatch_lookingcat3-1024x301.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>次は画像のリサイズについて勉強してみましょう！</p>
</div></div></div>



<p>画像のリサイズをする場合には、<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>cv2.resize() メソッド</strong></mark>を用います。ここで第一引数には、リサイズしたい画像を指定し、第二引数にはリサイズ後の画像サイズを指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>resize = cv2.resize ( image , ( fx , fy ) )</code></pre></div>



<p></p>



<p>また、リサイズ手法は<strong>2パターン</strong>に分けられます。<br>一つ目はアスペクト比（縦横比）を<span class="marker"><strong>保持させないで</strong></span>リサイズする方法で、二つ目はアスペクト比を<span class="marker"><strong>保持させつつ</strong></span>リサイズする方法です。</p>



<p>では順番に説明していきます！</p>



<h3 class="wp-block-heading">アスペクト比（縦横比）を保持させない場合</h3>



<p>初めに、アスペクト比を保持させない場合のプログラムを以下に示します。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>※実際に動かす際は　</strong><span class="marker"><strong>￥→半角＼</strong></span><strong>　に置き換えてください</strong></mark></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    resize1 = cv2.resize(image, (150,300))
    cv2.imshow(&quot;resize1&quot;, resize1)
    resize2 = cv2.resize(image, (250, 200))
    cv2.imshow(&quot;resize2&quot;, resize2)
    resize3 = cv2.resize(image, (400, 200))
    cv2.imshow(&quot;resize3&quot;, resize3)

    if image is None:
        print(&quot;ファイルが見つかりません&quot;)
        import sys
        sys.exit()

    cv2.waitKey()
    cv2.destroyAllWindows()

if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="393" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-1024x393.png" alt="resize-image" class="wp-image-739" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-1024x393.png 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-300x115.png 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-768x295.png 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38.png 1115w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-1024x393.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>画像の<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>縦と横のサイズを数値で指定する</strong></mark>とアスペクト比が<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>保持されない</strong></mark>です！なので画像自体が引き伸ばされたように表示されます！</p>
</div></div></div>



<p></p>



<h3 class="wp-block-heading">アスペクト比を保持させつつリサイズする方法</h3>



<p>次にアスペクト比を保持させつつリサイズする方法です。プログラムは以下の通りになります。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>※実際に動かす際は　</strong><span class="marker"><strong>￥→半角＼</strong></span><strong>　に置き換えてください</strong></mark></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    scale1=0.5
    scale2=1.5
    height=image.shape[0]
    width=image.shape<img decoding="async" class="ranking-number" src="https://tomtom-stock.com/wp-content/themes/jin/img/rank01.png" />

    resize1=cv2.resize(image,(int(width*scale1),int(height*scale1)))
    cv2.imshow(&quot;resize1&quot;,resize1)
    resize2 = cv2.resize(image, (int(width * scale2), int(height * scale2)))
    cv2.imshow(&quot;resize2&quot;, resize2

    if image is None:
        print(&quot;ファイルが見つかりません&quot;)
        import sys
        sys.exit()
    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="485" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-2-1024x485.jpg" alt="resize-image4" class="wp-image-738" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-2-1024x485.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-2-300x142.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-2-768x364.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-2.jpg 1210w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-38-2-1024x485.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>cv2.resize()の引数として指定する縦と横のサイズ<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>それぞれに同じ値を掛ける</strong></mark>ことでアスペクト比を保持できます！</p>
</div></div></div>



<p>アスペクト比を保持した場合でのリサイズは、画像が引き伸ばされることなく拡大・縮小されていることが分かります。</p>



<h2 class="wp-block-heading">画像をトリミングする方法</h2>



<p>画像をトリミングするためには、以下のコードを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>インスタンス名 [ x0 : x1 , y0 : y1 ]</code></pre></div>



<p></p>



<p>ここで、各引数は以下のようになっており<span class="marker"><strong>指定した範囲以外</strong></span>をトリミングします。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td class="has-text-align-center" data-align="center">x0</td><td>横方向の切り出し開始位置（pixcel）</td></tr><tr><td class="has-text-align-center" data-align="center">x1</td><td>横方向の切り出し終了位置（pixcel）</td></tr><tr><td class="has-text-align-center" data-align="center">y0</td><td>縦方向の切り出し開始位置（pixcel）</td></tr><tr><td class="has-text-align-center" data-align="center">y1</td><td>縦方向の切り出し終了位置（pixcel）</td></tr></tbody></table></figure>



<p>実際にトリミングした結果を以下に示します。<br><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>※実際に動かす際は　</strong><span class="marker"><strong>￥→半角＼</strong></span><strong>　に置き換えてください</strong></mark></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>import cv2

def main():
    image=cv2.imread(&quot;C:\Imagefile\cat-image.jpg&quot;)

    trimming1=image[0:300,0:300]
    cv2.imshow(&quot;trimming1&quot;,trimming1)
    trimming2 = image[150:450, 150:450]
    cv2.imshow(&quot;trimming2&quot;, trimming2)

    if image is None:
        print(&quot;ファイルが見つかりません&quot;)
        import sys
        sys.exit()
    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__==&quot;__main__&quot;:
    main()</code></pre></div>



<p>（実行結果）</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="629" src="https://tomtom-stock.com/wp-content/uploads/2022/03/image-40-1024x629.jpg" alt="resize-image5" class="wp-image-742" srcset="https://tomtom-stock.com/wp-content/uploads/2022/03/image-40-1024x629.jpg 1024w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-40-300x184.jpg 300w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-40-768x471.jpg 768w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-40.jpg 1072w, https://tomtom-stock.com/wp-content/uploads/2022/03/image-40-1024x629.jpg 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-jin-gb-block-chat-block balloon-box balloon-left clearfix has-ccc-ballon has-efefef-bgballon"><div class="balloon-icon maru"><img decoding="async" src="https://tomtom-stock.com/wp-content/uploads/2022/03/slime5.png"/></div><span class="icon-name">すらいむ管理人</span><div class="balloon-serif"><div class="balloon-content">
<p>このようにして<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>任意の場所</strong></mark>を切り出すことができます！</p>
</div></div></div>



<p></p>



<p>以上となります。最後まで見ていただきありがとうございました！<br>OpenCVによる二値化手法や、Python学習に役立つおすすめ書籍も紹介していますので是非参考にしてみて下さい！</p>



<p><strong>画像処理（OpenCV）の学習に</strong><span class="marker"><strong>おすすめの本</strong></span></p>



<p>参考：<a href="https://tomtom-stock.com/2022/03/13/python-bookreview-syosinnsya/">[2022年最新][初心者向け] Pythonに役立つ書籍：厳選12選</a><br>参考：<a href="https://tomtom-stock.com/2022/03/20/opencv-cv2-threshold/">[OpenCV] 二値化処理手法を徹底解説！</a></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tomtom-stock.com/2022/03/19/opencv-imageprocessing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
