CV-基础知识及原理总结
CV-基础知识及原理总结
1 本体
概念: 计算机视觉中的图像由像素点组成。
300*500的图片 x*y注意是先w*h ,宽为300 高为500,x向排列300个像素点
每个像素点即是一个数值(根据颜色通道而定)0-255 0 为黑色,255为最亮,即白色
通道:彩色图片,rgb,opencv bgr,三通道,即一个像素点在r通道有一个值,在g通道有一个值,b同理。合在一起显示了最终该像素点颜色。
黑白图片 通道只有一个。
帧:视频每秒设备处理的一张图片。比如每秒30帧,人眼看着就是很自然,1秒钟处理30张图片。
openCV使用
基本读取:
image=r"images/andrew_j_feustel_lmks5_rgb_test.jpg" base="images/cv_debug" faceid=cv2.imread(image) print(faceid.shape) face_part=faceid[90:170,375:475] import time save=os.path.join(base,"image_%s.jpg"%int(time.time())) cv2.imwrite(save,face_part) # ######## 绘制 框 save_rects=os.path.join(base,"image_rects_%s.jpg"%int(time.time())) cv2.rectangle(faceid,(375,90),(475,170),color=(0,0,255),thickness=4) cv2.imwrite(save_rects,faceid) # ######## 绘制圆点 save_cir = os.path.join(base, "image_circle_%s.jpg" % int(time.time())) for cor in [(100,100),(500,500)]: cv2.circle(faceid, cor, color=(0,0,255),radius=10) cv2.imwrite(save_cir, faceid) # ######## 图像按照颜色通道分割 b,g,r=cv2.split(faceid) c=1 for s in (b,g,r): cv2.imwrite("%s_%s.jpg"%(c,int(time.time())), s) c+=1 # ######## 三个通道的数据merge yuhang=cv2.merge((b,g,r)) cv2.imwrite("yuhang.jpg", yuhang) blue=faceid.copy() blue[:,:,1]=0 blue[:, :, 2] = 0 cv2.imwrite("blue.jpg", blue) # ######## 单独建一个数据结构,不在原数据上操作,也可copy.deepcopy() red=faceid.copy()
# ######## 对数据0,1通道全部数据置为最暗颜色/显示为全黑色。剩下的通道即为显现颜色。全红或全绿。 red[:,:,0]=0 red[:, :, 1] = 0 cv2.imwrite("red.jpg", red)
边缘检测
1 梯度处理
def gradient_img(fn, sv): img=read_image_file(fn) # 算子sobel gx1=cv2.Sobel(img,cv2.CV_64F,1,0,) gy1=cv2.Sobel(img,cv2.CV_64F,0,1,) imgadd=cv2.addWeighted(gx1,0.5,gy1,0.5,0) # 算子scharr gx=cv2.Scharr(img,cv2.CV_64F,1,0) gy=cv2.Scharr(img,cv2.CV_64F,0,1) img_sch=cv2.addWeighted(gx,0.5,gy,0.5,0) img_all=np.hstack((imgadd,img_sch)) cv2.imwrite(sv,img_all)