【发布时间】:2020-07-27 19:53:43
【问题描述】:
我有以下代码,其中 'Snap.JPG' 是 RGB 格式类型。
import cv2
img = cv2.imread("./Snap.JPG")
img[:,:,:2] = 255
cv2.imshow("Img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我想将此代码转换为 c++。实现img[:,:,:2] = 255部分代码的最快方法是什么?通道拆分和合并是我知道的选项之一,但是有没有更聪明的方法可以在 c++ 中进行切片?
编辑: 抱歉,我应该在输出中提到我想要的。我需要一个淡入淡出的效果,因为我想在它上面叠加一张图。
【问题讨论】:
-
您能举例说明
img[:,:,:2]的作用吗? -
我认为它的计算结果是一个左值表达式。
-
由于涉及副本,拆分和合并肯定不是最佳的。编译器应该能够优化所有元素的简单循环,您只覆盖
Vec3b的前两个部分。然后可能将其转换为cv::ParallelLoopBody的派生类,以便您可以使用cv::parallel_for_... 运行它...或者这些天 lambda 也可以。 -
@cigien,我猜它会将所有
i和j和k = 0, 1设置为img[i, j, k]。 -
@cigien 它为仅包含前两个通道的原始数组创建了一个视图。然后将 255 分配给第一个和第二个通道中的所有值。鉴于图像是 BGR(它是 OpenCV),这意味着图像中所有像素的所有蓝色和绿色强度都设置为 255。