LoginSignup
0
0

More than 1 year has passed since last update.

OpenCVでRGB画像と2値化画像を連結させて表示したい

Last updated at Posted at 2022-01-17

OpenCVでの画像連結方法

OpenCVでは複数の画像を連結させたい時は、cv2.hconcat/vconcat関数を用います。例として、以下のコードのように記述します。

main.py
import cv2

img1 = cv2.imread("img1.jpg")
img2 = cv2.imread("img2.jpg")

# サイズをそろえる
window_size = (400,400)
img1 = cv2.resize(img1, window_size)
img2 = cv2.resize(img2, window_size)

# 画像を横に連結
img = cv2.hconcat([img1,img2])
# img = cv2.vconcat([img1,img2]) # 画像を縦に連結する場合

# 画像を表示
while True:
    cv2.imshow("img",img)
    if cv2.waitKey(1) == ord('q'):
        break
cv2.destroyAllWindows()

ここで、ある画像のRGB画像と2値化画像を連結させようとします。
コードは以下のようになると思います。

main.py
# 注:これは間違ったコードです。
import cv2

# 2値化閾値
th = 100

img1 = cv2.imread("img1.jpg")
img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img1_binary = cv2.threshold(img_gray, th, 255, cv2.THRESH_BINARY)

# サイズをそろえる
window_size = (400,400)
img1 = cv2.resize(img1, window_size)
img1_binary = cv2.resize(img2, window_size)

# 画像を横に連結
img = cv2.hconcat([img1,img1_binary])

# 画像を表示
while True:
    cv2.imshow("img",img)
    if cv2.waitKey(1) == ord('q'):
        break
cv2.destroyAllWindows()

上のコードを実行すると次のようなエラーが出ます


cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\core\src\matrix_operations.cpp:67: error: (-215:Assertion failed) src[i].dims <= 2 && src[i].rows == src[0].rows && src[i].type() == src[0].type() in function 'cv::hconcat'

このエラーは、異なるタイプの画像を連結させようとしたために生じたものです。よって画像のタイプを合わせます。例えば連結させる直前に次のコードを記述することで2値化画像をRGB画像として変換させます。


img1_binary = cv2.cvtColor(img1_binary, cv2.COLOR_GRAY2BGR)

すなわち、先ほどの「間違ったコード」を正しく修正したものは以下のようになります。

main.py

import cv2

# 2値化閾値
th = 100

img1 = cv2.imread("img1.jpg")
img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img1_binary = cv2.threshold(img_gray, th, 255, cv2.THRESH_BINARY)

# 画像のタイプを揃える
img1_binary = cv2.cvtColor(img1_binary, cv2.COLOR_GRAY2BGR) # ←追加

# サイズをそろえる
window_size = (400,400)
img1 = cv2.resize(img1, window_size)
img1_binary = cv2.resize(img2, window_size)

# 画像を横に連結
img = cv2.hconcat([img1,img1_binary])

# 画像を表示
while True:
    cv2.imshow("img",img)
    if cv2.waitKey(1) == ord('q'):
        break
cv2.destroyAllWindows()

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0