python - 为什么 openCV2 的 Line (antialiased) 函数在 CV_16UC1 和 CV_8UC1 上给出不同的结果而没有溢出

标签 python opencv line antialiasing gaussianblur

themap = cv.CreateMat(8,8,cv.CV_8UC1)
cv.SetZero(themap)
cv.Line(themap,(0,0),(7,7),(10),1,cv.CV_AA) #draw a line
print np.asarray(themap[:,:])

#######output
[[ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]
 [ 0  2  7  2  0  0  0  0]
 [ 0  0  3 10  3  0  0  0]
 [ 0  0  0  3 10  3  0  0]
 [ 0  0  0  0  2  7  2  0]
 [ 0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0]]

但是,当我将图像类型更改为 cv.CV_16UC1 时,结果就完全不同了:

themap = cv.CreateMat(8,8,cv.CV_16UC1)
cv.SetZero(themap)
cv.Line(themap,(0,0),(7,7),(10),1,cv.CV_AA) #draw a line
print np.asarray(themap[:,:])

#######output
[[10  0  0  0  0  0  0  0]
 [ 0 10  0  0  0  0  0  0]
 [ 0  0 10  0  0  0  0  0]
 [ 0  0  0 10  0  0  0  0]
 [ 0  0  0  0 10  0  0  0]
 [ 0  0  0  0  0 10  0  0]
 [ 0  0  0  0  0  0 10  0]
 [ 0  0  0  0  0  0  0 10]]

我对这样的结果感到非常困惑。由于像素值只有10,cv.CV_8UC1图像类型应该不会出现溢出问题。为什么 cv.Line 的结果会如此不同?

opencv 安装在 /usr/local/Cellar/opencv@2/2.4.13.6_2/lib/python2.7/site-packages/cv.py 中,使用 brew install opencv@2.

最佳答案

不要使用旧的、已弃用的 OpenCV API。请改用 cv2 模块并直接使用 Numpy 创建图像。使用以下代码,结果符合预期,并且对于 8 位和 16 位图像都是相同的。

themap = np.zeros((8,8), dtype=np.uint16)                                                                                                                                           
cv2.line(themap, (0,0), (7,7), (10), lineType=cv2.LINE_AA)                                                                                                                                                 
print themap  

关于python - 为什么 openCV2 的 Line (antialiased) 函数在 CV_16UC1 和 CV_8UC1 上给出不同的结果而没有溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50812654/

相关文章:

python - 我对 Euler 项目 p84 的方法缺少什么?

iphone - 在 GPUImage 中实现一个简单的自适应阈值

javascript - 重新实现 svg 线不起作用

html - 我如何使用 HTML CSS 绘制线条?

python - 如何在 Python 模块中公开函数?

python - 如何使用 Python 脚本退出代码作为 Azure Pipeline 中以下任务的条件?

python - 为什么这个对象不可调用?对象是项目还是列表?

python - OpenCV2 : grayscaled video displays fine, 但不保存

c++ - 如何将 Opencv VideoWriter 与 GStreamer 一起使用?

arrays - 查找字符串中字符之间的长度