如何使用OpenCV-Python访问图像的像素?

时间:2015-03-11 08:12:23

标签: python opencv image-processing pixels

我想知道如何遍历图像的所有像素。我试过这个:

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

它打印一组垂直数字,不是数组形式。我也得到一个超出范围的数组异常。请建议一种方法。

10 个答案:

答案 0 :(得分:10)

访问Python中的特定像素

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

输出: [73 89 102]

答案 1 :(得分:7)

我不知道x变量的用途是什么。你不需要它。

只需使用:

foreach($optiondata as $key=>$value)
{
echo $value;
}

将打印一组垂直数字。如果要修改像素的值,请使用for i in range(rows): for j in range(cols): k = img[i,j] print k http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html

如果要打印整个阵列,请使用img.itemset()

答案 2 :(得分:3)

使用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

答案 3 :(得分:2)

试试这个:

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

答案 4 :(得分:1)

    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

答案 5 :(得分:1)

您可以做到

  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

    }
}

答案 6 :(得分:0)

垂直数组是图像的RGB(Reg,Green,Blue)通道值。如果您想要像素的单个值,则可能需要先将图像转换为灰度。这实际上取决于您的应用以及您想要对图像做什么,转换为灰度只是一种方法。

转换为灰度

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

documentation

中显示了一些基本操作

答案 7 :(得分:0)

您正在以灰度读取图像

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

在这里你只会得到强烈的

答案 8 :(得分:0)

此代码将通过循环为您提供数组&#39; k&#39; 中的像素值。

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

答案 9 :(得分:0)

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")