opencv学习笔记

1.图像读写压缩
img=cv2.imread(r"1.png",1) # 读取
cv2.imshow(“image”,img) # 显示
cv2.imwrite(“out1.jpg”,img,) # 写
cv2.imwrite(“yasuo.png”,img,[cv2.IMWRITE_PNG_COMPRESSION,9] ) #png 压缩
jpg压缩0-100(100质量最好) ,png 0-9(0质量最好)

2.图像resize dst=cv2.resize(img,(w,h))
2.1最近邻域插值法 iNew=int(i*(height1.0/des_height)) jNew=int(j(width*1.0/des_width))
2.2双线性插值法

3.缩放矩阵
[[A1 ,A2,B1] , [A3,A4,B2]] == > 拆分为[[A1,A2],[A3,A4]] 和 [[B1,B2]] 对于输入xy来说
Newx = A1x+A2Y+B1
newY =A2x+A2y +B2
4.仿射函数
获取仿射变换矩阵 cv2.getAffineTransform(mat_src,mat_det) #左上左下右上三个点映射,
获取旋转矩阵 cv2.getRotationMatrix2D((width/2,height/2),45,0.5)#中心,旋转
角度,缩放比
然后进行仿射变换

5.转灰度图
cv2.imread(“1.jpg”,0)
dest=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
心理学公式r0.299+g0.587+b*0.114

6.颜色反转 负片 255 -像素(灰度 bgr都可以)
7.马赛克 相邻10个像素用同一个像素替换 例子

foriinrange(100,500):
forjinrange(200,400):
ifi%100andj%100:
b,g,r=img[i,j]
forxinrange(0,10):
for y inrange(0,10):
dest[i+x,j+y]=(b,g,r)

8.毛玻璃效果 与马赛克类似,只不过是一定范围内随机取像素替代
mm=8#范围
For i in range(0,h-mm):
For j in range(0,w-mm):
index=int(random.random()*8)
b,g,r=img[i+index,j+index]
dest[i,j]=(b,g,r)
9.边缘检测
9.1 canny 灰度 去噪声 最后检测
img=cv2.imread(“1.jpg”,1)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.GaussianBlur(gray,(3,3),0) # 卷积核
dest=cv2.Canny(img,300,300) # 300是阈值
9.2sobel 2个矩阵,公式为 像素分别卷积这两个矩阵。分别得出x y方向的卷积值,然后,算梯度,比阈值
#x方向的矩阵
#[[1,2,1],
#[0,0,0],
#[-1,-2,-1]]
#y方向的矩阵
#[[1,0,-1],
#[2,0,-2],
#[1,0,-1]]

For I in range(0,h-2):
	For j in range(0,w-2):
		gy=gray[i,j]+gray[i,j+1]*2+gray[i,j+2]-gray[i+2,j]-2*gray[i+2,j+1]-gray[i+2,j+2]
		gx=gray[i,j]-gray[i,j+2]+2*gray[i+1,j]-2*gray[i+1,j+2]+gray[i+2,j]-gray[i+2,j+2]
		gard=math.sqrt(gx*gx+gy*gy) # 求梯度
		If gard > 300:    # 阈值300
			dest[i,j]=255
		else:
			dest[i,j]=0

10 浮雕效果 公式 (x)点像素-(x+1)点像素+150
11 油画 效果
#1灰度化
#2图片分为若干个方块,统计小方块灰度值
#3把灰度值分等级如8个段,把步骤2的灰度值映射到等级里
#4找到灰度等级最多的等级,并计算平均值
#5平均值替换原来的像素值

12 绘制
12.1直线绘制 cv2.line(dst,(100,200),(400,200),(0,255,0),10,cv2.LINE_AA)#图,起始位置,结束位置,颜色,宽度,抗锯齿参数
12.2矩形绘制cv2.rectangle(dst,(100,100),(400,400),(0,255,255),-1)#图,起始,结束,颜色,内容填充-1为填充,>0为宽度
12.3 圆形 cv2.circle(dst,(200,200),50,(255,0,0),-1)#图,圆心,半径,颜色,填充

13视频处理
cap=cv2.VideoCapture(“1.mp4”)
isOpen=cap.isOpened()
fps=cap.get(cv2.CAP_PROP_FPS)#fps
width=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))#每一帧宽
height=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))#每一帧宽
(flag,frame)=cap.read()#读取一帧 ,flag成功与否,frame

#图片生成视频
videoWirte=cv2.VideoWriter("out.mp4",-1,24,(640,480)) #,保存的视频,文件名,变啊默契,帧率,尺寸
videoWirte.write(img) #写图片
14. 特征
	a. harr特征 +adaboost分类
	b. Hog 特征 +svm分类 寻求最优超平面
		svm=cv2.ml.SVM_create()#创建支持向量积
		svm.setType(cv2.ml.SVM_C_SVC)#svmtype类型
		svm.setKernel(cv2.ml.SVM_LINEAR)#线性分类器
		svm.setC(0.01)
		result=svm.train(data,cv2.ml.ROW_SAMPLE,label)
		#预测
		(pre1,pre2)=svm.predict(pt_data)
		
		i. 特征 img   整个图
		ii. windows窗体   图中一部分,推荐大小为 64*128 , 特征计算最顶层单元,得到目标全部信息特征,可以判决
		iii. Block    窗体种一部分  ,来滑动的计算的 ,windowsize的wh是其整数倍,推荐大小16*16,步长一般8*8 。 计算block的数量为((64-16)/8+1) *((128-16)/8+1) =105
		iv. Cell      block中一部分 ,一般8*8     一个block有四个,
		v. Bin   一个bin 40度,一个cell含有九个bin
		vi. hog特征维度 是一个向量,维度 =105*4*9 =3780   (wind bolck个数* block下cell个数*cell下bin个数)
		vii. 梯度:像素为单位 (需要计算 windows窗体下所有元素)特征模板 :水平[1 0 -1]竖直[[1] [0] [1]]    将像素与模板进行卷积运算 。  f为 根号下(a方+b方) angle =arctan(a/b)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值