-
Notifications
You must be signed in to change notification settings - Fork 1
/
3c.html
135 lines (124 loc) · 10.3 KB
/
3c.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!DOCTYPE html>
<html lang="vi">
<head>
<title>Tin tức Python PyMI.vn</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta charset="utf-8" />
<link href="https://n.pymi.vn/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Tin tức Python PyMI.vn Full Atom Feed" />
<!-- twitter card metadata -->
<meta name="twitter:site" content="">
<meta name="twitter:title" content="Tách 3 màu rgb từ 1 bức ảnh OpenCV + numpy">
<meta name="twitter:description" content="1 cây làm chẳng nên non, 3 cây chụm lại nên trò 3 cây">
<!-- OG Tags -->
<meta property="og:url" content="./3c.html"/>
<meta property="og:title" content="Tách 3 màu rgb từ 1 bức ảnh OpenCV + numpy | Tin tức Python PyMI.vn" />
<meta property="og:description" content="1 cây làm chẳng nên non, 3 cây chụm lại nên trò 3 cây" />
<!-- favicon -->
<!-- moment.js for date formatting -->
<script src="./theme/js/moment.js"></script>
<!-- css -->
<link rel="stylesheet" type="text/css" href="./theme/css/main.css" />
<script>
/*! grunt-grunticon Stylesheet Loader - v2.1.2 | https://github.com/filamentgroup/grunticon | (c) 2015 Scott Jehl, Filament Group, Inc. | MIT license. */
(function(e){function t(t,n,r,o){"use strict";function a(){for(var e,n=0;u.length>n;n++)u[n].href&&u[n].href.indexOf(t)>-1&&(e=!0);e?i.media=r||"all":setTimeout(a)}var i=e.document.createElement("link"),l=n||e.document.getElementsByTagName("script")[0],u=e.document.styleSheets;return i.rel="stylesheet",i.href=t,i.media="only x",i.onload=o||null,l.parentNode.insertBefore(i,l),a(),i}var n=function(r,o){"use strict";if(r&&3===r.length){var a=e.navigator,i=e.Image,l=!(!document.createElementNS||!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect||!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1")||e.opera&&-1===a.userAgent.indexOf("Chrome")||-1!==a.userAgent.indexOf("Series40")),u=new i;u.onerror=function(){n.method="png",n.href=r[2],t(r[2])},u.onload=function(){var e=1===u.width&&1===u.height,a=r[e&&l?0:e?1:2];n.method=e&&l?"svg":e?"datapng":"png",n.href=a,t(a,null,null,o)},u.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",document.documentElement.className+=" grunticon"}};n.loadCSS=t,e.grunticon=n})(this);(function(e,t){"use strict";var n=t.document,r="grunticon:",o=function(e){if(n.attachEvent?"complete"===n.readyState:"loading"!==n.readyState)e();else{var t=!1;n.addEventListener("readystatechange",function(){t||(t=!0,e())},!1)}},a=function(e){return t.document.querySelector('link[href$="'+e+'"]')},c=function(e){var t,n,o,a,c,i,u={};if(t=e.sheet,!t)return u;n=t.cssRules?t.cssRules:t.rules;for(var l=0;n.length>l;l++)o=n[l].cssText,a=r+n[l].selectorText,c=o.split(");")[0].match(/US\-ASCII\,([^"']+)/),c&&c[1]&&(i=decodeURIComponent(c[1]),u[a]=i);return u},i=function(e){var t,o,a;o="data-grunticon-embed";for(var c in e)if(a=c.slice(r.length),t=n.querySelectorAll(a+"["+o+"]"),t.length)for(var i=0;t.length>i;i++)t[i].innerHTML=e[c],t[i].style.backgroundImage="none",t[i].removeAttribute(o);return t},u=function(t){"svg"===e.method&&o(function(){i(c(a(e.href))),"function"==typeof t&&t()})};e.embedIcons=i,e.getCSS=a,e.getIcons=c,e.ready=o,e.svgLoadedCallback=u,e.embedSVG=u})(grunticon,this);
grunticon(["./theme/css/icons.data.svg.css", "./theme/css/icons.data.png.css", "./theme/css/icons.fallback.css"]);
</script>
<noscript><link href="./theme/css/icons.fallback.css" rel="stylesheet"></noscript>
<!-- menu toggle javascript -->
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", initMenu);
function initMenu(){
var menu = document.getElementById("menu");
var menulink = document.getElementById("menu-link");
menulink.addEventListener("click", function toggleMenu(){
window.event.preventDefault();
menulink.classList.toggle('active');
menu.classList.toggle('active');
});
};
</script>
<meta name="description" content="1 cây làm chẳng nên non, 3 cây chụm lại nên trò 3 cây" />
<meta name="tags" content="RGB" />
<meta name="tags" content="BGR" />
<meta name="tags" content="OpenCV" />
<meta name="tags" content="image" />
<meta name="tags" content="numpy" />
</head>
<body>
<div role="banner" id="masthead">
<header>
<h1><a href="/">Pymiers's Blog</a></h1>
<a href="#menu" id="menu-link">more stuff</a>
<nav id="menu">
<ul>
<li><a href="./category/features.html">features</a></li>
<li class="active"><a href="./category/news.html">news</a></li>
<li><a href="./category/pymivn.html">pymi.vn</a></li>
</ul>
</nav>
</header>
</div>
<div class="page" role="main">
<div class="article" role="article">
<article>
<footer>
<a name="top"></a>
<p>
<time datetime=" 2022-04-13 00:00:00+07:00">
<script>document.write(moment('2022-04-13 00:00:00+07:00').format('LL'));</script>
</time>
</p>
</footer>
<header>
<h2>
Tách 3 màu rgb từ 1 bức ảnh OpenCV + numpy
</h2>
<center>
<h4>
by Pymier0
</h4>
</center>
</header>
<div class="content">
<p><img alt="img" src="https://images.unsplash.com/photo-1523717659-a250d867d6f1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwyMzI1MzN8MHwxfHJhbmRvbXx8fHx8fHx8fDE2NDk2OTI3NDQ&ixlib=rb-1.2.1&q=80&w=600"></p>
<p>Cách biểu diễn màu trên máy tính phổ biến dùng hệ màu <span class="caps">RGB</span> với 3 màu Red Green Blue (đỏ - xanh lục - xanh lam). Khi đọc file ảnh vào bằng opencv, mặc định sẽ có 1 array dạng (dài, rộng, 3), với 3 là 3 “kênh” màu. Để tách riêng 3 kênh màu, ta giữ nguyên 1 kênh, và gán 2 kênh còn lại bằng 0 (sử dụng numpy - vì 1 bức ảnh đọc vào từ opencv là 1 numpy ndarray).</p>
<div class="highlight"><pre><span></span><code><span class="c1"># $ python bgr.py ~/Pictures/python-logo.png</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">cv2</span> <span class="k">as</span> <span class="nn">cv</span>
<span class="n">cim</span> <span class="o">=</span> <span class="n">cv</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">c1</span> <span class="o">=</span> <span class="n">cim</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">c1</span><span class="p">[:,</span> <span class="p">:,</span> <span class="mi">1</span><span class="p">:]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">cv</span><span class="o">.</span><span class="n">imwrite</span><span class="p">(</span><span class="s2">"blue.png"</span><span class="p">,</span> <span class="n">c1</span><span class="p">)</span>
<span class="n">c2</span> <span class="o">=</span> <span class="n">cim</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">c2</span><span class="p">[:,:,</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">c2</span><span class="p">[:,:,</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">cv</span><span class="o">.</span><span class="n">imwrite</span><span class="p">(</span><span class="s2">"green.png"</span><span class="p">,</span> <span class="n">c2</span><span class="p">)</span>
<span class="n">c3</span> <span class="o">=</span> <span class="n">cim</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">c3</span><span class="p">[:,:,:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">cv</span><span class="o">.</span><span class="n">imwrite</span><span class="p">(</span><span class="s2">"red.png"</span><span class="p">,</span> <span class="n">c3</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">"Done"</span><span class="p">)</span>
</code></pre></div>
<p><img alt="python-logo" src="https://www.python.org/static/img/python-logo.png">
<img alt="blue" src="./images/blue.png">
<img alt="blue" src="./images/green.png">
<img alt="blue" src="./images/red.png"></p>
<p>Kết quả thu được 3 bức ảnh với màu lần lượt là xanh lam, xanh lục, đỏ (<span class="caps">BGR</span>). Theo <a href="https://stackoverflow.com/questions/14556545/why-opencv-using-bgr-colour-space-instead-of-rgb">“cộng đồng mạng StackOverflow”</a>, đó là do “lịch sử” để lại, khi mà OpenCV dùng <span class="caps">BGR</span> chứ không theo thứ tự phổ biến <span class="caps">RGB</span>.</p>
<p>Hết.</p>
<p>Đăng ký ngay tại <a href="https://pymi.vn">PyMI.vn</a> để học Python tại Hà Nội <span class="caps">TP</span> <span class="caps">HCM</span> (Sài Gòn),
trở thành lập trình viên #python chuyên nghiệp ngay sau khóa học.</p>
</div>
<div class="back-to-top">
<a href="#top">back to top</a>
</div>
</article>
</div>
<!-- end article -->
<footer>
<div class="icons">
<a href="https://github.com/pymivn" target="_blank"><div class="icon-github icon"></div></a>
</div>
<p>© <script>document.write(moment().format('YYYY'));</script> Pymiers</p>
</footer>
</div>
</body>
</html>