LoginSignup
9
3

More than 3 years have passed since last update.

OpenCVのhconcatがなぜかエラーになるとき

Last updated at Posted at 2020-09-14

 表題の通りです。エラーメッセージと原因がシンプルに結びついているページがなかったので記事にしました。

 ある画像と別の画像(同じ画像でもよいですが)を連結したい時は、OpenCVのhconcatevconcatを使うのが便利です。例えば、hconat(水平方向への連結)をする場合は当然、お互いの縦ピクセル数を揃える必要があるのですが、時々それを揃えた上でもなぜかエラーが出てくることがあります。

 こんな感じに。

python
combined_image = cv2.hconcat([left_image,right_image])
output
Exception has occurred: error
OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\core\src\matrix_operations.cpp:68: error: (-215:Assertion failed) src[i].dims <= 2 && src[i].rows == src[0].rows && src[i].type() == src[0].type() in function 'cv::hconcat'

 なんだか行列計算のサイズがあってなさそうです。リサイズを間違えたのでしょうか。printでデバッグします。

print(left_image.shape)
print(right_image.shape)
output
(256, 256)
(256, 256)

 あっとるやないかーい!

 結論的に言うと、データの型が合っていないのが原因です。numpyを使って合わせましょう。

left_image = np.array(left_image)
left_image = out.astype('int32')
right_image = np.array(right_image)
right_image = canny.astype('int32')

 これで連結できるようになります。

おまけ

 ほかありがちなエラー。

高さが違う

 リサイズしましょう。cv2.resize(img,(x,y))でできます。

画像を読み込めていない

 初歩的ですがありがちです。imreadだとパス指定をミスっていても、エラーにならずNoneが返されるのです。printしたらNoneになってないか確認しましょう。

グレースケールとカラー画像を合成しようとしている

 これもありがちです。グレーの画像の方もデータ上はカラー画像にする必要があります。cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)でできます。

9
3
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
9
3