使用OpenCV,能否在同一窗口上同时显示黑白和彩色图像?

14

使用OpenCV库,可以在同一窗口中同时显示黑白和彩色图像吗? 如何在同一窗口中显示这两个图像?

4个回答

37

fraxel的回答解决了旧的cv接口问题。我想使用cv2接口来展示它,只是为了理解如何在新的cv2模块中轻松实现。 (可能对未来的访问者有所帮助)。以下是代码:

import cv2
import numpy as np

im = cv2.imread('kick.jpg')
img = cv2.imread('kick.jpg',0)

# Convert grayscale image to 3-channel image,so that they can be stacked together    
imgc = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
both = np.hstack((im,imgc))

cv2.imshow('imgc',both)
cv2.waitKey(0)
cv2.destroyAllWindows()

以下是我得到的输出:

在此输入图片描述


@abid-rahman-k,视频能否做到同样的效果?而不必将其变成灰度图像? - user4681252

9
是的,这是一个例子,注释中有解释:

enter image description here

import cv
#open color and b/w images
im = cv.LoadImageM('1_tree_small.jpg')
im2 = cv.LoadImageM('1_tree_small.jpg',cv.CV_LOAD_IMAGE_GRAYSCALE)
#set up our output and b/w in rgb space arrays:
bw = cv.CreateImage((im.width,im.height), cv.IPL_DEPTH_8U, 3)
new = cv.CreateImage((im.width*2,im.height), cv.IPL_DEPTH_8U, 3)
#create a b/w image in rgb space
cv.Merge(im2, im2, im2, None, bw)
#set up and add the color image to the left half of our output image
cv.SetImageROI(new, (0,0,im.width,im.height))
cv.Add(new, im, new)
#set up and add the b/w image to the right half of output image
cv.SetImageROI(new, (im.width,0,im.width,im.height))
cv.Add(new, bw, new)
cv.ResetImageROI(new)
cv.ShowImage('double', new)
cv.SaveImage('double.jpg', new)
cv.WaitKey(0)

它是使用Python编写的,但很容易转换成其他语言。


非常感谢你,fraxel。这正是我在寻找的。再次感谢。 - user991511

2

用现代化的写法对代码进行小改进

使用concatenate替代hstack

因为hstack已经被停止使用(也可以使用stack)

import cv2
import numpy as np

im = cv2.imread('kick.jpg')
img = cv2.imread('kick.jpg',0)

# Convert grayscale image to 3-channel image,so that they can be stacked together    
imgc = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
both = np.concatenate((im,imgc), axis=1)   #1 : horz, 0 : Vert. 

cv2.imshow('imgc',both)
cv2.waitKey(0)
cv2.destroyAllWindows()

有人对比过cv2.hconcat()np.concatenate()的性能吗?我使用前者,因为我更喜欢在我的代码中尽可能使用opencv而不是numpy,但我想我应该运行一下性能测试。 - eric

-2
import cv2
img = cv2.imread("image.jpg" , cv2.IMREAD_GRAYSCALE)
cv2.imshow("my image",img)
cv2.waitkey(0)
cv2.destroyAllWindow


#The image file should be in the application folder.
#The output file will be 'my image' name.
#The bottom line is to free up memory.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接