image - 如何使 `cv2.imshow` 输出与 `plt.imshow` 输出相同?
问题描述
如何使cv2.imshow
输出与输出相同plt.imshow
?
# loading image
img0 = cv2.imread("image.png")
# converting to gray scale
gray = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY)
# remove noise
img = cv2.GaussianBlur(gray, (3, 3), 0)
# convolute with proper kernels
laplacian = cv2.Laplacian(img, cv2.CV_64F)
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5) # x
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5) # y
imgboth = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
plt.imshow(imgboth, cmap='gray')
plt.show()
cv2.imshow("img", cv2.resize(imgboth, (960, 540)))
cv2.waitKey(0)
cv2.destroyAllWindows()
原始图像
plt.output
cv2.imshow
解决方案
# ...
canvas = imgboth.astype(np.float32)
canvas /= np.abs(imgboth).max()
canvas += 0.5
cv.namedWindow("canvas", cv.WINDOW_NORMAL)
cv.imshow("canvas", canvas)
cv.waitKey()
cv.destroyWindow("canvas")
只是看起来不同,因为您发布了缩略图,而不是原始大小的图像。
当您给出imshow
浮点值时,您之所以这样做是因为laplacian
和sobelx
是浮点数,那么它会将 .. 的范围假定0.0
为1.0
黑色 .. 白色。
matplotlib 自动缩放数据。OpenCV 的 imshow 没有。这两种行为各有利弊。
推荐阅读
- python - 如何使用 python 从交互式图表中抓取数据?
- sql - 查找三个相关表之间的缺失行
- android - BottomSheetDialogFragment 固定动作的位置
- javascript - 用于克隆或原始的 Jquery 可拖动函数的多个结果
- python - 如何识别左键和右键单击以及0xFF
- chart.js - Chartjs 工具提示未根据画布大小显示
- ruby - 根据第二个数组中的子字符串,将键值对添加到第一个数组中的散列
- masstransit - MassTransit:如何在 IRetryObserver 中检索消息的内容
- flutter - 当我们单击 Flutter 列表中的任何图像时,如何全屏打开图像?
- hybris - 如何在视图上读取 CMSParagraphComponent 的 uid