web-dev-qa-db-ja.com

与えられた座標を使用して画像に点を描く方法

画像を読み込んで画像に赤い点を描こうとした

img=mpimg.imread('./images/im00001.jpg')
red = [0,0,255]
# Change one pixel
img[ 0.,-26.10911452,0. ]=red
imgplot = plt.imshow(img)

しかし、次のエラーが発生しました

ValueError:割り当て先は読み取り専用です

5
kim Yumi

あなたがやっていることは実際にあなたのイメージを変えます。

表示されているとおりに画像上に点を描くには、画像を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()

enter image description here

0
zardosht

あなたは正しい軌道に乗っています。 Numpyスプライシングを使用してピクセルのプロパティを変更できます

img[x,y] = [B,G,R]

たとえば、(50,50)のピクセルを赤に変更するには、次のようにします。

img[50,50] = [0,0,255]

ここで、1つのピクセルを赤に変更します(かなり小さい)。

enter image description here

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)

enter image description here

0
nathancy