画像を読み込んで画像に赤い点を描こうとした
img=mpimg.imread('./images/im00001.jpg')
red = [0,0,255]
# Change one pixel
img[ 0.,-26.10911452,0. ]=red
imgplot = plt.imshow(img)
しかし、次のエラーが発生しました
ValueError:割り当て先は読み取り専用です
あなたがやっていることは実際にあなたのイメージを変えます。
表示されているとおりに画像上に点を描くには、画像をmatplotlib
の図で表示し、その上に点をプロットします。 pyplot.plot()
関数を使用してポイントをプロットするか、または pyplot.scatter()
関数を使用してポイントの配列をプロットできます。
image = mpimg.imread("road.jpg")
pts = np.array([[330,620],[950,620],[692,450],[587,450]])
plt.imshow(image)
plt.plot(640, 570, "og", markersize=10) # og:shorthand for green circle
plt.scatter(pts[:, 0], pts[:, 1], marker="x", color="red", s=200)
plt.show()
あなたは正しい軌道に乗っています。 Numpyスプライシングを使用してピクセルのプロパティを変更できます
img[x,y] = [B,G,R]
たとえば、(50,50)
のピクセルを赤に変更するには、次のようにします。
img[50,50] = [0,0,255]
ここで、1つのピクセルを赤に変更します(かなり小さい)。
import cv2
import numpy as np
width = 100
height = 100
# Make empty black image of size (100,100)
img = np.zeros((height, width, 3), np.uint8)
red = [0,0,255]
# Change pixel (50,50) to red
img[50,50] = red
cv2.imshow('img', img)
cv2.waitKey(0)
別の方法は、ポイントをインプレースで描画するために cv2.circle() を使用することです。
関数ヘッダーは
cv2.circle(image, (x, y), radius, (B,G,R), thickness)
これを使用すると、同じ結果が得られます
cv2.circle(img, (50,50), 1, red, -1)