7.29任务反馈 王可

1.Task:

        task1: 将视频流读入,将其中连续两帧图片进行做差处理,保存做差后的图片。

              代码如下:

 1 import cv2 #opencv的缩写为cv2
 2 import matplotlib.pyplot as plt # matplotlib库用于绘图展示
 3 import numpy as np   # numpy数值计算工具包
 4 vc = cv2.VideoCapture('、home/wang300404/opencv/test.mp4')
 5 c=1
 6 while open: # 如果正常打开,则不停循环读取
 7     ret, frame = vc.read()
 8     if frame is None: # 视频读完以后的下一帧为空
 9         break
10     if ret == True:
11         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 读取的图片转换成黑白的   
12         cv2.imwrite('/home/wang300404/video_picture'+str(c)+'.jpg')
13         c=c+1
14         if cv2.waitKey(1) & 0xFF == 27: # 把视频的每一帧保存,0xFF为退出键ESC
15             break
16 vc.release() # release()完成与 open() 相反的工作.释放 open() 向内核申请的所有资源
17 cv2.destroyAllWindows() # 销毁所有窗口
18 
19 -----------------------------读取视频,并把每一帧作为照片保存------------------------
20 
21 # 读取图片
22 img1 = cv2.imread("/home/wang30040/video_picture/jietu1.jpg")
23 img2= cv2.imread("./home/wang30040/video_picture/jietu2.jpg")
24 # 转灰度图
25 img1_gray= cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
26 img2_gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
27      
28 res= cv2.absdiff(gray_cur, gray_base)
29 cv2.imshow("res ", res )
30 cv2.waitKey(0)
View Code

             结果如下:

          task2: 选择一张图片进行图像的锐化、增强,并将这两张图片与原图进行拼接显示。

          锐化代码如下(使用傅里叶变换高通滤波实现)

                        

 1 import numpy as np
 2 import cv2
 3 from matplotlib import pyplot as plt
 4 
 5 img = cv2.imread('home/wang300404/opencvtest/le.jpg',0)
 6 img_float32 = np.float32(img)
 7 
 8 dft = cv2.dft(img_float32,flags=cv2.DFT_COMPLEX_OUTPUT)
 9 dft_shift = np.fft.fftshift(dft)
10 
11 rows, cols = img.shape
12 crow, ccol = int(rows/2), int(cols/2) # 中心位置
13 
14 # 高通滤波
15 mask = np.ones((rows,cols,2),np.uint8)
16 mask[crow-30:crow+30,ccol-30:ccol+30] = 0 # 中间区域置 0,外面的区域置 1
17 fshift = dft_shift * mask
18 f_ishift = np.fft.ifftshift(fshift)
19 img_back = cv2.idft(f_ishift)
20 img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
21 
22 plt.subplot(121),plt.imshow(img,cmap = 'gray')
23 plt.title('Input Image'), plt.xticks([]),plt.yticks([])
24 plt.subplot(122),plt.imshow(img_back,cmap='gray')
25 plt.title('Result'),plt.xticks([]),plt.yticks([])
View Code

 

 

         锐化效果如下:

        

           增强代码如下:(使用自适应直方图均衡化实现)

          

1 img=cv.imread('/home/wang300404/opencvtest/le.jpg')
2 clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8)) # 自适应均衡化方法生成出来    
3 res_clahe = clahe.apply(img) # 方法应用到输入图片当中
4 res = np.hstack((img,res_clahe))
5 cv2.imshow('res',res)
6 cv2.waitKey(0)
View Code

         增强效果如下:

          

 

 

-----------------------------------------------------------------------------------------------------------------分界线 分界线------------------------------------------------------------------------------------------------------------------------------2.学习进度汇报及近期思考

   本周进行了opencv的学习,一开始也准备手撕文档,但opencv看文档确实有点抽象,后来还是乖乖回去刷视频,刚开始入门的一些基本操作如图片导入视频导入,图像的一些基本操作,形态学操作等还是可以掌握,从边缘检测开始就对原理有点蒙圈了,从傅里叶变换开始,原理中的各种高数知识和线代知识有点头晕,而且课程在讲解过程中也只讲了每一步是做什么的,不知道这样做的原因是什么,或者说怎么想到去这样做的,所以从傅里叶变换开始后面的如直方图,角点检测,sift算法(尤其是这个,得到特征点之后的操作基本都没看懂),特征匹配对原理都是一知半解的听完然后跑一下代码。所以虽然opencv的操作视频基本都刷完了,当感觉还是一个很蒙圈的状态,不知道怎么用。周末准备刷一下视频中的实战案例,看看能不能将这些技术与现实结合一下。

 

posted @ 2022-07-29 16:24  王小美O(∩_∩)O  阅读(44)  评论(0)    收藏  举报