OpenCV関連

任意の列で昇順又は降順の並び替え

import numpy as np

#例
x = np.array([[ 1, -3],
              [ 9,  3],
              [ 7, -6],
              [ 1, -5],
              [ 4,  8]])
i = 0
j = 1

#i列目で昇順ソート
asc_x = x[np.argsort(x[:,i])]

#j列目で降順ソート
des_x = x[np.argsort(x[:,j])][::-1]

#例 出力
print("0列目で昇順ソート\nasc_x=\n",asc_x)
print("1列目で降順ソート\ndes_x=\n",des_x)

出力結果

0列目で昇順ソート
asc_x=
 [[ 1 -3]
 [ 1 -5]
 [ 4  8]
 [ 7 -6]
 [ 9  3]]
1列目で降順ソート
des_x=
 [[ 4  8]
 [ 9  3]
 [ 1 -3]
 [ 1 -5]
 [ 7 -6]]

参考文献 NumPy>numpy.argsort

文字の描画

import cv2

# img : 画像データ
# text : 文字
# (x ,y) : int 横の位置(左端基準), int 縦の位置(上端基準)
# fontFace : 書体
# fontScale : float 文字サイズ
# color : RGB or RGBA 各値0~255 (cv2.cvtColor(img, cv2.COLOR_RGBA2BGRを使用する場合))
#         リストはint,float可
#         np.arrayはint不可,float可
# thickness : int 線の太さ
# lineType : 線の種別 cv.FILLED, cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA
# bottomLeftOrigin : Trueだと文字が上下逆さまになりました
img = cv2.putText(img, text, (left, top),  fontFace, fontScale, color, thickness = 1, lineType =cv2.LINE_8 , bottomLeftOrigin=False)

サンプル

import cv2
import numpy as np

img = np.full((100,100,3),255,dtype=np.uint8)

#main
img = cv2.putText(img, "sample", (10, 50),  cv2.FONT_HERSHEY_SIMPLEX, 0.5, [0,0,0], thickness = 1, lineType =cv2.LINE_AA)

img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)
cv2.imwrite("sample.png",img)

出力結果

参考文献

OpenCV>Drawing Functions> putText OpenCV>Drawing Functions> fontFace OpenCV>Drawing Functions> lineType

折れ線の描画

import cv2

# img : 画像データ
# pts : int 折れ線配列(3次元配列)
#       折れ線i - 点j - 座標k
#       i = 0,1,...
#       j = 0,1,...
#       k = 0,1 (x座標が0番目, y座標が1番目)
# isClosed : bool 折れ線が閉じるかどうか
# color : RGB or RGBA 各値0~255 (cv2.cvtColor(img, cv2.COLOR_RGBA2BGRを使用する場合))
#         リストはint,float可
#         np.arrayはint不可,float可
# thickness : int 折れ線の太さ(デフォルト=1)
# lineType : 線の種別 cv.FILLED, cv2.LINE_4, cv2.LINE_8, cv2.LINE_AA
#       デフォルト = cv2.LINE_8
img = cv2.polylines(img, pts, isClosed, color, thickness, lineType)

サンプル

import numpy as np
import cv2

img = np.full((200,300,3),255,dtype=np.uint8)

pts = np.array( [[10,10],[60,100],[10,190]], dtype=np.int32)

# main
img = cv2.polylines(img,[pts], False, [  0,  0,255], 1, lineType=cv2.LINE_AA)

cimg = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)
cv2.imwrite("sample1.png",cimg)

pts1 = np.array( [[ 80, 20],[180,100],[ 80,180]], dtype=np.int32)
pts2 = np.array( [[200, 50],[270, 50],[270,150],[200,150]], dtype=np.int32)

# main
img = cv2.polylines(img,[pts1,pts2], True, [  0,128,  0], 1, lineType=cv2.LINE_AA)

cimg = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)
cv2.imwrite("sample2.png",cimg)

出力結果

sample1.png

sample2.png

参考文献

opencv> 描画函数 > cv::polylines