web-dev-qa-db-ja.com

OpenCV-Pythonを使用して画像のピクセルにアクセスするにはどうすればよいですか?

画像のすべてのピクセルをループする方法を知りたい。私はこれを試しました:

import cv2
import numpy as np

x = np.random.randint(0,5,(500,500))
img = cv2.imread('D:\Project\Capture1.jpg',0)
p = img.shape
print p
rows,cols = img.shape

for i in range(rows):
    for j in range(cols):
        k = x[i,j]
        print k

配列の形式ではない垂直方向の数値のセットを出力します。また、配列の範囲外の例外も発生しています。方法を提案してください。

16
Harini Subhakar

Pythonで特定のピクセルにアクセスする

import cv2
image = cv2.imread("sample.jpg")
pixel= image[200, 550]
print pixel

出力:[73 89 102]

10
Rohit Salunke

X変数の目的がわかりません。あなたはそれを必要としません。

単に使用:

_for i in range(rows):
  for j in range(cols):
     k = img[i,j]
     print k
_

これは確かに垂直方向の数字のセットを出力します。ピクセルの値を変更する場合は、img.itemset()を使用します。 http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

配列全体を出力する場合は、print(img)を使用します

6
Roxanne

配列のインデックスを使用したアクセスは、numpy配列では遅くなります。

アクセスにはitem()メソッドを、変更の実行にはitemsetを使用できます。

例えば

for i in range(0,img.shape[0]):
    for j in range(0,img.shape[1]):
        pixel = img.item(i, j)
        print pixel
2
Vivek Ananthan

これを試して:

import numpy as np
import Image

image = Image.open("example.png")
image_data = np.asarray(image)

for i in range(len(image_data)):
    for j in range(len(image_data[0])):
        print(image_data[i][j])  # this row prints an array of RGB color for each pixel in the image
2
Be'ezrat Hashem
import cv2
import numpy as np

imagename = "capure.jpg"
img = cv2.imread(imagename, 0) # 0 params, for gray image
height, width = img.shape[:2]  # image height and width
print(img)  # all image pixels value in array
print(img[10, 10])  # one pixel value in 10,10 coordinate

for y in range(height):
    for x in range(width):
        print(img[y,x], end = "\t")
    print("\t")
2
Mahmut Aydın
    import cv2
    import numpy as np 

    image = cv2.imread('C:/Users/Asus/Desktop/test.jpg', cv2.IMREAD_COLOR)

    for x in range (1,480):
        for y in range (1,640):

            pixel = image[x,y]
            print pixel

あなたはこれを行うことができます

  for (int y = 0; y<im.rows; y++) 
    {

  for (int x = 0; x<im.cols; x++)
    {
        Vec3b color = im.at<Vec3b>(Point(x, y));
        //you can print color this has the pixel value

    }
}
1
Muskan Agarwal

このコードは、ループを通過することで配列'k'のピクセル値を提供します。

import cv2
import numpy as np

img = cv2.imread('sample.jpg',0)
rows,cols = img.shape
k = []
for i in range(rows):
    for j in range(cols):
        k.append(img[i,j])
print k
0
Anon George

垂直配列は、画像のRGB(Reg、Green、Blue)チャネル値です。ピクセルの単一の値が必要な場合は、最初に画像をグレースケールに変換することができます。それは本当にあなたのアプリケーションとあなたが画像で何をしたいかによります、グレースケールへの変換はただ一つのアプローチです。

グレースケールに変換するには

grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ドキュメント にいくつかの基本的な操作を示します

0
user3590169

あなたは画像をグレースケールで読んでいます

img = cv2.imread( 'D:\ Project\Capture1.jpg'、0)

ここでは激しさだけが得られます

0
paparoch