2015-03-18 3 views
1

Я использую python 2.7 и OpenCV для установки изображения на все белые пиксели, но он не работает.OpenCV в Python - манипуляция пикселями

Вот мой код:

import cv2 
import numpy as np 

image = cv2.imread("strawberry.jpg") #Load image 

imageWidth = image.shape[1] #Get image width 
imageHeight = image.shape[0] #Get image height 

xPos = 0 
yPos = 0 

while xPos < imageWidth: #Loop through rows 
    while yPos < imageHeight: #Loop through collumns 

     image.itemset((xPos, yPos, 0), 255) #Set B to 255 
     image.itemset((xPos, yPos, 1), 255) #Set G to 255 
     image.itemset((xPos, yPos, 2), 255) #Set R to 255 

     yPos = yPos + 1 #Increment Y position by 1 
    xPos = xPos + 1 #Increment X position by 1 

cv2.imwrite("result.bmp", image) #Write image to file 

print "Done" 

Я использую NumPy установить пиксели изображения - но result.bmp является точной копией исходного изображения.

Что я делаю неправильно?

EDIT:

Я знаю, что это плохая идея, чтобы перебрать пиксели, но то, что это не функционирующая часть моего кода?

ответ

1

Помимо действительное предложение, сделанное @berak, если это код, который вы написали, чтобы узнать, какую библиотеку вы хотите использовать, то вы допустили две ошибки:

  1. Вы забыли сбросить yPos указатель индекса строки после внутреннего цикла
  2. Вы изменили порядок xPos, yPos в itemset. .

Я думаю, что ваш образ сделал изменения, но это только на первый ряд, который вы не можете увидеть, если вы не приближать Если вы изменить свой код, как это, он работает:

import cv2 
import numpy as np 

image = cv2.imread("testimage.jpg") #Load image 

imageWidth = image.shape[1] #Get image width 
imageHeight = image.shape[0] #Get image height 

xPos, yPos = 0, 0 

while xPos < imageWidth: #Loop through rows 
    while yPos < imageHeight: #Loop through collumns 

     image.itemset((yPos, xPos, 0), 255) #Set B to 255 
     image.itemset((yPos, xPos, 1), 255) #Set G to 255 
     image.itemset((yPos, xPos, 2), 255) #Set R to 255 

     yPos = yPos + 1 #Increment Y position by 1 

    yPos = 0 
    xPos = xPos + 1 #Increment X position by 1 

cv2.imwrite("result.bmp", image) #Write image to file 

Обратите внимание, что я бы также не рекомендовал повторять по пикселу изображения по пикселям, как упоминалось ранее.

1

Правило 1 с opencv/python: never итерация по пикселям, если вы можете этого избежать!

, если вы хотите установить все пиксели в (1.2.3), это так же просто, как:

image[::] = (1,2,3) 

для 'всех белых':

image[::] = (255,255,255) 
+0

Спасибо, но что не работает в моем коде, я просто применил этот пример к другому из моих проектов, над которыми я работаю. Извините, если бы я был более ясен. –

Смежные вопросы