json_metadata | "{"format": "markdown", "tags": ["coogger", "goruntu-islemleri", "numpy", "python", "opencv"], "app": "coogger/1.4.1", "ecosystem": {"version": "1.4.1", "body": "### Hedefler\r\n- Piksel de\u011ferlerine eri\u015fme ve bunlar\u0131 de\u011fi\u015ftirme\r\n- Resim \u00f6zelliklerine eri\u015fme\r\n- Resim B\u00f6lgesini ( alan\u0131n\u0131 ) Ayarlama (ROI)\r\n- G\u00f6r\u00fcnt\u00fcleri B\u00f6lme ve Birle\u015ftirme\r\n\r\n> Bu b\u00f6l\u00fcmdeki hemen hemen t\u00fcm i\u015flemler esas olarak **OpenCV** yerine **Numpy** ile ilgilidir. **OpenCV** ile daha iyi optimize edilmi\u015f kod yazmak i\u00e7in **Numpy**'nin iyi bir bilgisi gereklidir.\r\n\r\n## Piksel de\u011ferlerine eri\u015fme ve de\u011fi\u015ftirme\r\n\u00d6nce bir renkli resim y\u00fckleyelim:\r\n\r\n```python\r\n>>> import cv2\r\n>>> import numpy as np\r\n\r\n>>> img = cv2.imread('messi5.jpg')\r\n```\r\n\r\nBir piksel de\u011ferine sat\u0131r ve s\u00fctun koordinatlar\u0131yla eri\u015febilirsiniz.BGR g\u00f6r\u00fcnt\u00fcs\u00fc i\u00e7in, Mavi, Ye\u015fil, K\u0131rm\u0131z\u0131 de\u011ferlerin bir dizisini d\u00f6nd\u00fcr\u00fcr.Gri tonlamal\u0131 g\u00f6r\u00fcnt\u00fc i\u00e7in yaln\u0131zca kar\u015f\u0131l\u0131k gelen yo\u011funluk d\u00f6nd\u00fcr\u00fcl\u00fcr.\r\n\r\n```python\r\n>>> px = img[100,100]\r\n>>> print(px)\r\n[157 166 200]\r\n\r\n# sadece mavi pix'ele eri\u015fim\r\n>>> blue = img[100,100,0]\r\n>>> print(blue)\r\n157\r\n```\r\n\r\nPiksel de\u011ferlerini ayn\u0131 \u015fekilde de\u011fi\u015ftirebilirsiniz.\r\n\r\n```python\r\n>>> img[100,100] = [255,255,255]\r\n>>> print(img[100,100])\r\n[255 255 255]\r\n```\r\n\r\n#### Uyar\u0131 \r\n>Numpy, h\u0131zl\u0131 dizi hesaplamalar\u0131 i\u00e7in optimize edilmi\u015f bir k\u00fct\u00fcphanedir. Bu nedenle her piksel de\u011ferine eri\u015fmek ve onu de\u011fi\u015ftirmek \u00e7ok yava\u015f olacakt\u0131r\r\n\r\n#### Not\r\n>Yukar\u0131da bahsedilen y\u00f6ntem normalde dizinin bir b\u00f6lgesini se\u00e7mek i\u00e7in kullan\u0131l\u0131r, \u00f6rne\u011fin ilk 5 s\u0131ra ve son 3 s\u00fctun buna benzer. Tek tek piksel eri\u015fimi i\u00e7in, Numpy dizi y\u00f6ntemleri, array.item () ve array.itemset () daha iyi kabul edilir. Fakat her zaman bir skala d\u00f6nd\u00fcr\u00fcr. Bu nedenle, t\u00fcm B, G, R de\u011ferlerine eri\u015fmek istiyorsan\u0131z, array.item () \u00f6\u011fesini her biri i\u00e7in ayr\u0131 ayr\u0131 \u00e7a\u011f\u0131rman\u0131z gerekir.\r\n\r\nDaha iyi piksel eri\u015fme ve d\u00fczenleme y\u00f6ntemi:\r\n\r\n```python\r\n# k\u0131rm\u0131z\u0131( RED ) de\u011ferine eri\u015fme\r\n>>> img.item(10,10,2)\r\n59\r\n# k\u0131rm\u0131z\u0131 (RED) de\u011feri de\u011fi\u015ftirme\r\n>>> img.itemset((10,10,2),100)\r\n>>> img.item(10,10,2)\r\n100\r\n```\r\n\r\n## Resim \u00d6zelliklerine Eri\u015fme\r\nG\u00f6r\u00fcnt\u00fc \u00f6zellikleri, sat\u0131r say\u0131s\u0131, s\u00fctun ve kanallar, resim verileri t\u00fcr\u00fc, piksel say\u0131s\u0131 vb. I\u00e7erir.\r\n\r\nG\u00f6r\u00fcnt\u00fcn\u00fcn \u015fekline **img.shape** taraf\u0131ndan eri\u015filir. Birka\u00e7 sat\u0131r, s\u00fctun ve kanal say\u0131s\u0131 d\u00f6nd\u00fcr\u00fcr (resim renk ise )\r\n\r\n```python\r\n>>> print(img.shape)\r\n(342, 548, 3)\r\n```\r\n\r\n#### Not \r\n> Resim gri tonlamal\u0131ysa, d\u00f6nd\u00fcr\u00fclen tuple yaln\u0131zca birka\u00e7 sat\u0131r ve s\u00fctun i\u00e7erir. Bu nedenle, y\u00fcklenen g\u00f6r\u00fcnt\u00fcn\u00fcn gri tonlamal\u0131 m\u0131 yoksa renkli g\u00f6r\u00fcnt\u00fc olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in iyi bir y\u00f6ntemdir.\r\n\r\nToplam piksel say\u0131s\u0131na **img.size** ile eri\u015filebilir.\r\n\r\n```python\r\n>>> print(img.size)\r\n562248\r\n```\r\n\r\nresim veri t\u00fcr\u00fc **image.dtype** taraf\u0131ndan elde edilir:\r\n\r\n```python\r\n>>> print(img.dtype)\r\nuint8\r\n``` \r\n\r\n#### Not\r\n\r\n> Hata ay\u0131klarken img.dtype \u00e7ok \u00f6nemlidir, \u00e7\u00fcnk\u00fc OpenCV-Python kodlar\u0131n da \u00e7ok say\u0131da ge\u00e7ersiz veri t\u00fcr\u00fcnden kaynaklanan hata vard\u0131r.\r\n\r\n## Image ROI\r\nBazen, belirli g\u00f6r\u00fcnt\u00fc par\u00e7alar\u0131 ile oynamak zorunda kalacaks\u0131n\u0131z.G\u00f6r\u00fcnt\u00fclerde g\u00f6z alg\u0131lamas\u0131 i\u00e7in \u00f6nce g\u00f6r\u00fcnt\u00fcn\u00fcn y\u00fcz alg\u0131lama i\u015flemini yap\u0131n, daha sonra y\u00fcz b\u00f6lgesi i\u00e7inde g\u00f6zler aran\u0131r. Bu yakla\u015f\u0131m g\u00f6z bulma do\u011frulu\u011funu art\u0131r\u0131r.\r\n\r\nBurada topu se\u00e7ip resmin ba\u015fka bir b\u00f6lgesine kopyalayaca\u011f\u0131m:\r\n```python\r\n>>> ball = img[280:340, 330:390]\r\n>>> img[273:333, 100:160] = ball\r\n```\r\n\r\n<img general=\"center br-2\" title=\"opencv\" src=\"https://www.coogger.com/media/images/opencv.jpg\">\r\n\r\n## G\u00f6r\u00fcnt\u00fc Kanallar\u0131n\u0131n Ayr\u0131lmas\u0131 ve Birle\u015ftirilmesi\r\nGerekti\u011finde bir g\u00f6r\u00fcnt\u00fcn\u00fcn B, G,R kanallar\u0131, tek tek d\u00fczlemlerine ayr\u0131labilir. Sonra, bireysel kanallar yine BGR g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc olu\u015fturmak \u00fczere bir araya birle\u015ftirilebilir.\r\n```python\r\n>>> b,g,r = cv2.split(img)\r\n>>> img = cv2.merge((b,g,r))\r\n# veya\r\n>>> b = img[:,:,0]\r\n# Diyelim ki, t\u00fcm k\u0131rm\u0131z\u0131 pikselleri s\u0131f\u0131rlamak istiyorsan,\r\n# bunu yapmana gerek yok. Daha h\u0131zl\u0131 olan Numpy'i kullanabilirsiniz.\r\n\r\n>>> img[:,:,2] = 0\r\n```\r\n#### Not\r\n\r\n> **cv2.split()** uzun s\u011fren bir i\u015flemdir , bu nedenle yaln\u0131zca gerekirse kullan\u0131n. **Numpy** \u00e7ok daha verimlidir.\r\n\r\n## Resimler i\u00e7in S\u0131n\u0131rlar Olu\u015fturma (Padding)\r\nG\u00f6r\u00fcnt\u00fcn\u00fcn etraf\u0131nda, foto\u011fraf \u00e7er\u00e7evesi gibi bir \u00e7er\u00e7eve olu\u015fturmak istiyorsan\u0131z **cv2.copyMakeBorder()** i\u015flevini kullanabilirsiniz. Ancak konvol\u00fcsyon i\u015flemi, s\u0131f\u0131r doldurma vb. I\u00e7in daha fazla uygulama vard\u0131r. Bu i\u015flev a\u015fa\u011f\u0131daki arg\u00fcmanlar\u0131 al\u0131r:\r\n\r\n- ***src*** - input image ( resim girdisi )\r\n- ***top, bottom, left, right*** - \u00fcst, alt, sol, sa\u011f kenarl\u0131k geni\u015fli\u011fi ilgili y\u00f6ndeki piksel say\u0131s\u0131na g\u00f6re\r\n- ***borderType*** - Hangi s\u0131n\u0131r\u0131n eklenece\u011fini tan\u0131mlayan k\u0131s\u0131m. \u015eu t\u00fcrlerden biri olabilir:\r\n- ***cv2.BORDER_CONSTAN***T - Sabit renkli bir kenarl\u0131k ekler. De\u011fer sonraki arg\u00fcman olarak verilmelidir.\r\n- ***cv2.BORDER_REFLECT*** -Kenarl\u0131k, s\u0131n\u0131r \u00f6\u011felerinin ayna yans\u0131mas\u0131 olacakt\u0131r bunun gibi: fedcba | abcdefgh | hgfedcb\r\n- ***cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT*** - Yukar\u0131dakiyle ayn\u0131, ancak \u015fu \u015fekilde hafif bir de\u011fi\u015fiklikle: gfedcb | abcdefgh | gfedcba\r\n- ***cv2.BORDER_REPLICATE*** - Son \u00f6\u011fe, \u015fu \u015fekilde \u00e7o\u011falt\u0131l\u0131r: aaaaaa | abcdefgh | hhhhhhh\r\n- ***cv2.BORDER_WRAP*** -A\u00e7\u0131klayam\u0131yorum, \u015funa benzeyecektir: cdefgh | abcdefgh | abcdefg\r\n- ***value*** - Kenarl\u0131k t\u00fcr\u00fcn\u00fcn cv2.BORDER_CONSTANT olmas\u0131 durumunda kenarl\u0131k rengi\r\n\r\nDaha iyi anlamak i\u00e7in t\u00fcm bu kenarl\u0131k t\u00fcrlerini g\u00f6steren \u00f6rnek bir kod a\u015fa\u011f\u0131dad\u0131r:\r\n```python\r\nimport cv2\r\nimport numpy as np\r\nfrom matplotlib import pyplot as plt\r\n\r\nBLUE = [255,0,0]\r\n\r\nimg1 = cv2.imread('opencv_logo.png')\r\n\r\nreplicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)\r\nreflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)\r\nreflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)\r\nwrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)\r\nconstant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)\r\n\r\nplt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')\r\nplt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')\r\nplt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')\r\nplt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')\r\nplt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')\r\nplt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')\r\n\r\nplt.show()\r\n```\r\nA\u015fa\u011f\u0131daki sonuca bak\u0131n, ( Resim **matplotlib** ile g\u00f6sterilir, b\u00f6ylece KIRMIZI ve MAV\u0130'ler de\u011fi\u015f toku\u015f olur );\r\n\r\n<img general=\"center br-4\" title=\"opencv\" src=\"https://www.coogger.com/media/images/opencv_5MHKX6N.jpg\">"}}" |
---|