计算机视觉工程师岗面试题及答案.docxVIP

  • 1
  • 0
  • 约7.07千字
  • 约 17页
  • 2026-02-17 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年计算机视觉工程师岗面试题及答案

一、编程实现题(共3题,每题20分)

1.图像边缘检测算法实现(20分)

要求:

-使用C++或Python实现Sobel算子边缘检测算法,处理一张灰度图像(假设已读取为`img_gray`,大小为M×N)。

-输出边缘检测结果,并计算检测到的边缘像素数量。

-说明如何处理边缘效应(例如使用镜像填充或零填充)。

答案与解析:

python

importnumpyasnp

importcv2

defsobel_edge_detection(img_gray):

Sobel算子

sobel_x=np.array([[-1,0,1],

[-2,0,2],

[-1,0,1]])

sobel_y=np.array([[-1,-2,-1],

[0,0,0],

[1,2,1]])

零填充(处理边缘效应)

padded_img=cv2.copyMakeBorder(img_gray,1,1,1,1,cv2.BORDER_REFLECT)

初始化输出图像

G_x=np.zeros_like(img_gray)

G_y=np.zeros_like(img_gray)

卷积计算

foriinrange(1,padded_img.shape[0]-1):

forjinrange(1,padded_img.shape[1]-1):

region=padded_img[i-1:i+2,j-1:j+2]

G_x[i-1,j-1]=np.sum(sobel_xregion)

G_y[i-1,j-1]=np.sum(sobel_yregion)

计算梯度幅值

G=np.sqrt(G_x2+G_y2)

G=np.uint8(np.clip(G,0,255))

阈值化(可选)

edges=cv2.threshold(G,50,255,cv2.THRESH_BINARY)[1]

统计边缘像素数量

edge_count=np.sum(edges==255)

returnedges,edge_count

示例调用

img=cv2.imread(input.jpg,cv2.IMREAD_GRAYSCALE)

edges,count=sobel_edge_detection(img)

print(f边缘像素数量:{count})

解析:

1.Sobel算子原理:通过卷积计算图像的x方向(水平)和y方向(垂直)梯度,梯度幅值即为边缘强度。

2.边缘效应处理:使用`BORDER_REFLECT`(镜像填充)避免边界像素因缺少邻域而丢失信息。

3.阈值化:可选步骤,用于二值化边缘检测结果(如设置阈值为50)。

2.光流法运动估计(20分)

要求:

-使用Python实现Lucas-Kanade光流法,处理两帧连续图像(`frame1`和`frame2`,大小为M×N)。

-输出光流向量场,并可视化(可选)。

-说明光流法假设条件及其局限性。

答案与解析:

python

importnumpyasnp

importcv2

importmatplotlib.pyplotasplt

deflucas_kanade_optical_flow(frame1,frame2,window_size=15,ksize=3):

初始化LK参数

pyr_scale=0.5

levels=2

winsize=window_size

ksize=ksize

criteria=(cv2.TERM_CRITERIA_EPS|cv2.TERM_CRITERIA_COUNT,10,0.03)

检测关键点(使用ORB或FAST)

orb=cv2.ORB_create()

kp1=orb.detect(frame1,None)

kp2=orb.detect(frame2,None)

匹配关键点

matcher=cv2.BFMatcher(cv2.NORM_HAMMING,crossCheck=True)

matches=matcher.match(kp1,kp2)

matches=sorted(matches,key=lambdax:x.distance)

提取匹配点

points1=np.float32([kp1[m.queryIdx].ptforminmatches]).reshape(-1,1,2)

points2=np.float

文档评论(0)

1亿VIP精品文档

相关文档