OpenCV-Python Tutorials (2) ~Core Operations~ å¾å
ååå§ããOpenCV-Python Tutorialsã®è¨äºï¼Core Operationsã®ç¶ãã§ãï¼
å ¬å¼ï¼Core Operations — OpenCV-Python Tutorials 1 documentation
ããã©ã¼ãã³ã¹ã®è©ä¾¡ã¨æ¹åã®ãã¯ããã¯
ç®æ¨
ç»åå¦çã§ã¯ï¼1ç§ãã¨ã«å¤§éã®æ¼ç®å¦çãæ±ãããï¼èªåãæ¸ãã³ã¼ãã¯æ£ãã解決æ³ãæä¾ããã ãã§ãªãæéã®æ¹æ³ã§ããå¿ è¦ãããï¼ãã®ç« ã§ã¯ï¼æ¬¡ã®ãããªãã¨ãå¦ã¶ï¼
- ã³ã¼ãã®ããã©ã¼ãã³ã¹ã®è©ä¾¡
- ã³ã¼ãã®ããã©ã¼ãã³ã¹ãæ¹åããããã¤ãã®ç§è¨£
- cv2.getTickCountï¼cv2.getTickFrequencyãªã©ã®é¢æ°ãç»å ´ãã
OpenCVããé¢ãã¦ï¼Pythonãã¾ãå®è¡æéã®è¨æ¸¬ã«å½¹ç«ã¤timeã¨ããã¢ã¸ã¥ã¼ã«ãæä¾ãã¦ããï¼ä»ã®profileã¨ããã¢ã¸ã¥ã¼ã«ãï¼ã³ã¼ãã®ããããã®é¢æ°ã«ã©ããããæéãããã£ããã¨ãã£ããããªã³ã¼ãã®è©³ç´°ãç¥ãã®ã«å½¹ç«ã¤ï¼ãããIPythonã使ã£ã¦ããå ´åã¯ï¼ãããã®æ©è½å ¨ã¦ã¯ã¦ã¼ã¶ã¼ãã¬ã³ããªã¼ãªããæ¹ã«ãã£ã¦çµ±åããã¦ããï¼ããããï¼ããã¤ãã®éè¦ãªãã®ãè¦ã¦ããï¼ããã¦ï¼è©³ç´°ã¯è¿½å è³æã®ç« ã®ãªã³ã¯ã§ç¢ºèªãããï¼
OpenCVã§ã®ããã©ã¼ãã³ã¹ã®è¨æ¸¬
cv2.getTickCounté¢æ°ã¯ã¤ãã³ãåç §ï¼æ©æ¢°ã®ã¹ã¤ãããONã«ãªã£ããããªæï¼ã®å¾ãããã®é¢æ°ãå¼ã°ããæã¾ã§ã®ã¯ããã¯ãµã¤ã¯ã«æ°ãè¿ãï¼å¾ã£ã¦ï¼ããé¢æ°ã®å®è¡ã®åã¨å¾ã«å¼ã³åºãã°ï¼é¢æ°ã®å®è¡ã«ä½¿ãããã¯ããã¯æ°ããããï¼
cv2.getTickFrequencyé¢æ°ã¯ã¯ããã¯ãµã¤ã¯ã«ã®é »åº¦ï¼ã¾ãã¯1ç§ãããã®ã¯ããã¯ãµã¤ã¯ã«æ°ãè¿ãï¼å¾ã£ã¦ï¼å®è¡ã®ç§æ°ãç¥ãã«ã¯ï¼æ¬¡ã®ããã«ã§ããï¼
e1 = cv2.getTickCount()
# è¨æ¸¬ãããã³ã¼ã
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()
以ä¸ã®ä¾ã§ãã¢ã³ã¹ãã¬ã¼ã·ã§ã³ã示ããï¼ä»¥ä¸ã®ä¾ã§ã¯ï¼5ãã49ã®ç¯å²ã§ã®ã«ã¼ãã«ã«ã¡ãã£ã¢ã³ãã£ã«ã¿ï¼ãã¤ãºé¤å»ï¼ãç¨ããï¼ï¼çµæãã©ã®ããã«ãªããã¯æ°ã«ããªãã¦ããï¼ããã¯ã´ã¼ã«ã§ã¯ãªãï¼ï¼
img1 = cv2.imread('messi5.jpg') e1 = cv2.getTickCount() for i in xrange(5,49,2): img1 = cv2.medianBlur(img1,i) e2 = cv2.getTickCount() t = (e2 - e1)/cv2.getTickFrequency() print t # Result I got is 0.521107655 seconds
ã¡ã¢
time
ã¢ã¸ã¥ã¼ã«ã§ãåããã¨ãã§ããï¼cv2.getTickCount
ã®ä»£ããã«time.time()
é¢æ°ã使ãï¼ããããã¨2ã¤éããåããï¼
OpenCVã§ã®ããã©ã«ãã®æé©å
OpenCVã®é¢æ°ã®å¤ãã¯SSE2ãAVXãªã©ã使ã£ã¦æé©åããã¦ããï¼ããã¯æé©åããã¦ããªãã³ã¼ããå«ãã§ããï¼ã ããããæã ã®ã·ã¹ãã ããããã®æ©è½ããµãã¼ãããã°ï¼ãããå©ç¨ããã¹ãã ï¼ã»ã¨ãã©ãã¹ã¦ã®æè¿ã®ããã»ããµã¼ã¯ãããããµãã¼ããã¦ããï¼ï¼ããã¯ã³ã³ãã¤ã«ã®éã«ããã©ã«ãã§ã§ããï¼å¾ã£ã¦ï¼OpenCVã¯å¯è½ã§ããã°æé©åãããã³ã¼ããå®è¡ãï¼ããã§ãªããã°æé©åããã¦ããªãã³ã¼ããå®è¡ããï¼cv2.useOptimized()ã使ã£ã¦ãããå¯è½ï¼ä¸å¯è½ãã確èªã§ãï¼cv2.setUseOptimized()ã使ã£ã¦å¯è½ï¼ä¸å¯è½ã«ããããè¨å®ã§ããï¼ç°¡åãªä¾ãè¦ã¦ã¿ããï¼
In [1]: import cv2 In [2]: img = cv2.imread('messi.jpg') # æé©åãããã¦ããããç¢ºèª In [3]: cv2.useOptimized() Out[3]: True In [4]: %timeit res = cv2.medianBlur(img,49) 10 loops, best of 3: 22.3 ms per loop # æé©åãä¸å¯è½ã« In [5]: cv2.setUseOptimized(False) In [6]: cv2.useOptimized() Out[6]: False In [7]: %timeit res = cv2.medianBlur(img,49) 10 loops, best of 3: 59.1 ms per loop
æé©ãããã¡ãã£ã¢ã³ãã£ã«ã¿ãªã³ã°ã¯æé©åããã¦ããªããã®ãã2å以ä¸æ©ãï¼ãããã®ã½ã¼ã¹ã確èªãããï¼ã¡ãã£ã¢ã³ãã£ã«ã¿ãªã³ã°ã¯SIMDæé©åãªã®ãè¦ããã¨ãã§ããï¼ãªã®ã§ï¼æé©åãå¯è½ã«ããããã«ã³ã¼ãã®æåã§ããã使ããï¼ï¼ããã©ã«ãã§ã¯å¯è½ã«ãªã£ã¦ãããã¨ããå¿ããªãï¼
IPythonã§ã®ããã©ã¼ãã³ã¹ã®è¨æ¸¬
äºã¤ã®ä¼¼ããããªå¦çã®ããã©ã¼ãã³ã¹ãæ¯ã¹ãå¿
è¦ãæã
ããã ããï¼IPythonã¯ãããããããã«%timeit
ã¨ãããã¸ããã¯ã³ãã³ããæä¾ãã¦ãããï¼ããã¯ããæ£ç¢ºãªçµæãå¾ãããã«æ°åã³ã¼ããå®è¡ãã¦ãããï¼ããä¸åº¦ï¼ä¸è¡ã®ã³ã¼ããè¨æ¸¬ããã®ã«é©ãã¦ããï¼
ä¾ãã°ï¼æ¬¡ã®ã³ã¼ãã®ã©ã®å¦çãããè¯ããç¥ã£ã¦ããã ãããï¼x = 5; y = x**2
ï¼x = 5; y = x*x
ï¼x = np.unit8([5]); y = x*x
ï¼y = np.square(x)
ï¼IPythonã®ã·ã§ã«ã§%timeitã使ã£ã¦ç¢ºããã¦ã¿ããï¼
In [8]: x = 5 In [9]: %timeit y = x**2 The slowest run took 4.16 times longer than the fastest. This could mean that an intermediate result is being cached 1000000 loops, best of 3: 325 ns per loop In [10]: %timeit y = x*x 10000000 loops, best of 3: 51.2 ns per loop In [12]: import numpy as np In [13]: z = np.uint8([5]) In [14]: %timeit y = z*z The slowest run took 2896.08 times longer than the fastest. This could mean that an intermediate result is being cached 1000000 loops, best of 3: 415 ns per loop In [15]: %timeit y = np.square(z) The slowest run took 56.59 times longer than the fastest. This could mean that an intermediate result is being cached 1000000 loops, best of 3: 423 ns per loop
x = 5; y = x*x
ãæãæ©ãï¼Numpyã¨æ¯ã¹ã¦ç´8åéããã¨ããããï¼ï¼â»ããã¯åæã§ã¯20åã¨ãªã£ã¦ãããï¼èªåã§ãã£ãå®è¡çµæã«åãããï¼ é
åã®ä½æãèããå ´åãï¼100å以ä¸æ©ããªãã ããï¼ã¯ã¼ã«ãããï¼
ã¡ã¢
Pythonã®scalarå¦çã¯Numpyã®scalarå¦çãããéãï¼ä»ã®ã¨ããï¼1,2ã®è¦ç´ ãå«ãã å¦çã§ã¯Numpyã®arrayå¦çããPythonã®scalarå¦çã®æ¹ãããï¼arrayã®ãµã¤ãºãå°ã大ãããªã£ãå ´åã«Numpyã¯æå¹ã ï¼
ãã1ã¤ã®ä¾ã試ãã¦ã¿ããï¼ä»åã¯ï¼åãç»åã«å¯¾ãã¦ã®cv2.countNonZero()ã¨np.count_nonzero()ã®ããã©ã¼ãã³ã¹ãæ¯è¼ããï¼
In [35]: img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) In [36]: %timeit z = cv2.countNonZero(grayImg) The slowest run took 13.75 times longer than the fastest. This could mean that an intermediate result is being cached 100000 loops, best of 3: 9.11 µs per loop In [37]: %timeit z = np.count_nonzero(grayImg) 1000 loops, best of 3: 348 µs per loop
OpenCVã®é¢æ°ãNumpyãã40åè¿ãéããã¨ããããï¼
ã¡ã¢
é常ï¼OpenCVã®é¢æ°ã¯Numpyã®é¢æ°ããéãï¼ä»ã®ã¨ããåãå¦çã§ã¯ï¼OpenCVã®æ¹ããããã¦ããï¼ãããï¼ä¾å¤ãããããï¼Numpyãã³ãã¼ã®ä»£ããã«ãã¥ã¼ãæ±ã£ã¦ããå ´åã«éã£ã¦ã¯ä¾å¤ãããããï¼
ãããªãä»ã®IPythonã® magic command
ããã©ã¼ãã³ã¹ï¼ãããã¡ã¤ãªã³ã°ï¼ã©ã¤ã³ãããã¡ã¤ãªã³ã°ï¼ã¡ã¢ãªç®¡çãªã©ãè¨ãããã®ä»ã®magic commandsãããã¤ãããï¼ãããã¯ãã¹ã¦ããã¥ã¡ã³ãã«ãã¾ãã¾ã¨ãããã¦ããã®ã§ï¼ãªã³ã¯ã ããç½®ãã¦ããï¼æ欲çãªèªã¿æã¯ãã²åãçµãã§ã¿ããï¼
æé©åã®ãã¯ããã¯
Pythonã¨Numpyã®ããã©ã¼ãã³ã¹ãæ大éã«æ´»ç¨ãããã¯ããã¯ãã³ã¼ãã£ã³ã°ææ³ãããã¤ãããï¼ããã§ã¯é¢é£ã®ãããã®ã ãç´¹ä»ãã¦ï¼ã½ã¼ã¹ãæ¹åããããã®ãªã³ã¯ãç½®ãã¦ããï¼ãã£ããåããã¦ãããã¡ã¤ãªã³ã°ãï¼ããã«ããã¯ãæ¢ãã¦æé©åããï¼
Pythonã®ä¸ã§ã¯ã§ããã ãã«ã¼ãã使ãã®ãé¿ããï¼2éï¼3éã®ã«ã¼ãã¯ç¹ã«é¿ããï¼ãããã¯ããããé ãï¼
ã¢ã«ã´ãªãºã ï¼ã³ã¼ããæ大éã«æ¡å¼µãããã®ã¸ãã¯ãã«åããï¼Numpyã¨OpenCVã¯ãã¯ãã«å¦çã«æé©åããã¦ããï¼
ãã£ãã·ã¥ã»ã³ãã¼ã¬ã³ã¹ãæ´»ç¨ãã
arrayã®ã³ãã¼ã¯å¿ è¦ã§ãªãéã絶対ã«ä½ããªãï¼ãã®ä»£ããã«viewsã使ãããã«ãããï¼arrayã®ã³ãã¼ã¯ã³ã¹ãããããå¦çã ï¼
追å è³æ
Scipy Lecture Notes - Advanced Numpy
å ¬å¼ã§3ã¤ç®ã«è¼ã£ã¦ããªã³ã¯ãæ»ãã§ãã®ã§ä»£ããã«IPythonã®ãªã³ã¯ãè¼ãã¦ãã
Configuration and customization — IPython 1.2.1: An Afternoon Hack documentation
ãã¾ã
ä½åãã¨ã©ã¼ãåºã¦æããã£ãã®ã§æ¸ãã¦ããï¼
In [16]: %timeit z = cv2.countNonZero(img) OpenCV Error: Assertion failed (cn == 1) in countNonZero, file /tmp/opencv320150927-47164-e3j47b/opencv-3.0.0/modules/core/src/stat.cpp, line 1297
ã°ã°ã£ã¦ã¿ããï¼1ãã£ã³ãã«ã®ç»åã§ãªãã¨ãããªãã®ã§ï¼ã«ã©ã¼ç»åã ã¨ãã¡ãããï¼
c++ - countNonZero function gives an assertion error in openCV - Stack Overflow
ãããï¼ã°ã¬ã¼ã¹ã±ã¼ã«ã®ç»åã使ãã°ããã®ãï¼ã¨æã£ã¦ãã£ã¦ã¿ããã¾ãã¨ã©ã¼ãåºãï¼
In [21]: img2 = cv2.imread('gray.png') In [22]: %timeit z = cv2.countNonZero(img2) OpenCV Error: Assertion failed (cn == 1) in countNonZero, file /tmp/opencv320150927-47164-e3j47b/opencv-3.0.0/modules/core/src/stat.cpp, line 1297
ãã£ã³ãã«æ°ãè¦ã¦ã¿ãï¼
In [24]: img.shape Out[24]: (342, 548, 3) In [25]: img2.shape Out[25]: (2448, 3264, 3)
ã©ã£ã¡ã3ãã£ã³ãã«ã®ç»åã£ã½ãï¼
In [27]: grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) In [28]: grayImg.shape Out[28]: (342, 548)
ã°ã¬ã¼ã¹ã±ã¼ã«ã«å¤æãããã§ããï¼
èªã¿è¾¼ã¿ã®æã«ç¬¬2å¼æ°ã«0ãæå®ããã¨ã°ã¬ã¼ã¹ã±ã¼ã«ã§èªã¿è¾¼ããã¨ãã§ãããããï¼ã£ã¦ã®ãè¦ã¤ããã®ã§ãã£ã¦ã¿ãï¼
【シリーズ】「pythonとOpenCVを用いたCVプログラミング 」第8回:... | DERiVE コンピュータビジョン ブログ
In [32]: img3 = cv2.imread('messi.jpg',0) In [33]: img2.shape Out[33]: (2448, 3264, 3)
ãµãï¼ãªãã§3ãã£ã³ãã«ã®ã¾ã¾ãªãã⦠ãã®ã¸ãããããããªããã§ã¾ã調ã¹ã¾ãâ¦