gpt4 book ai didi

python - 在 OpenCV Python 中设置像素值

转载 作者:行者123 更新时间:2023-12-02 17:35:48 24 4
gpt4 key购买 nike

改变像素值的速度有多快?在 C# 中,我只需要使用 GetPixel()获取像素值和SetPixel()改变它(它很容易使用但速度很慢,MarshallCopy 和 Lock/UnlockBits 要快得多)。

在此代码中,我将黑色像素标记为 1,将白色像素标记为 0

import tkFileDialog
import cv2
import numpy as np
from matplotlib import pyplot as plt

path = tkFileDialog.askopenfilename()
bmp = cv2.imread(path) #reading image
height, width, channels = bmp.shape

if channels == 3:
bmp = cv2.cvtColor(bmp, cv2.COLOR_BGR2GRAY) #if image have 3 channels, convert to BW
bmp = bmp.astype('uint8')

bmp = cv2.adaptiveThreshold(bmp,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
cv2.THRESH_BINARY,11,2) #Otsu thresholding

imageData = np.asarray(bmp) #get pixels values

pixelArray = [[0 for y in range(height)] for x in range(width)] #set size of array for pixels

for y in range(len(imageData)):
for x in range(len(imageData[0])):
if imageData[y][x] == 0:
pixelArray[y][x] = 1 #if black pixels = 1
else:
pixelArray[y][x] = 0 #if white pixels = 0

在 c# 中,它可以如下所示:
for (y = 0; y < bmp.Height-1; y++)
{
for (x = 0; x < bmp.Width-1; x++)
{
if (pixelArray[y, x] == 1)
newImage.SetPixel(x, y, Color.Black); //printing new bitmap
else
newImage.SetPixel(x, y, Color.White);
}
}
image2.Source = Bitmap2BitmapImage(newImage);

在下一步中,我会将 countour 像素标记为“2”,但现在我想问你,如何根据我的特定值在 python 中设置新图像,然后显示它?出于实验目的,我只想按字节值反转图像(从 B&W 到 W&B)。你能帮我怎么做吗?

编辑1

我想我找到了解决方案,但我有一个 channel 的 GREYSCALE 图像(我认为这就是我使用 cv2.cvtColor 将 3 channel 图像转换为灰度图像时的工作原理)。像这样的功能:
im[np.where((im == [0,0,0]).all(axis = 2))] = [0,33,166]

可以很好地工作,但是如何使该功能与灰度图像一起工作?我想将一些黑色像素(0)设置为白色(255)

最佳答案

对于单 channel 图像(灰度图像),请使用以下内容:

首先创建灰度图像的副本:

gray_2 = gray.copy()

现在将黑色像素指定为白色:
gray_2[np.where(gray == 0)] = 255

关于python - 在 OpenCV Python 中设置像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51168268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com