python opencv的基础初学

多用于边缘

图像梯度

sobel

 先把矩阵展成一维,再进行点积,不知道是什么运算

CV64F是什么

img = cv2. imread('pie. png', cv2. IMREAD_GRAYSCALE)
cv2.imshow("img",img)
cv2.waitKey
cv2.destroyAllWindows()


####dst = cv2.Sobel(src, ddepth, dx, dy, ksize)
#ddepth:图像的深度
#·dx和dy分别表示水平和竖直方向
####·ksize是Sobel算子的大小


def cv_show(img, name):
cv2.imshow(name,img)
cv2. waitKey()
cv2. destroyAllWindows()


sobelx = cv2. Sobel(img, cv2. CV_64F,1,0, ksize=3)
#只关心边缘(梯度)在哪里,并不关心边缘是黑->白的边缘还是白->黑的边缘

cv_show(sobelx,'sobelx')

 这样会导致一个白圆只出现左半部分

#白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值

sobelx = cv2. Sobel(img, cv2. CV_64F, 1,0, ksize=3)
sobelx = cv2. convertScaleAbs(sobelx)
cv_show(sobelx,'sobelx')
 

sobely = cv2. Sobel(img, cv2. CV_64F,0, 1, ksize=3)
sobely = cv2. convertScaleAbs(sobely)
cv_show(sobely,'sobely')


#分别计算x和y,再求和

sobelxy = cv2. addWeighted(sobelx,0.5,sobely,0.5,0)
cv_show(sobelxy,'sobelxy')

#不建议直接计算

sobelxy=cv2. Sobel(img, cv2. CV_64F,1,1,ksize=3)
sobelxy = cv2. convertScaleAbs(sobelxy)
cv_show(sobelxy,'sobelxy')

img = cv2.imread('lena. jpg', cv2. IMREAD_GRAYSCALE)
cv_show(img,'img')
#推荐
img = cv2. imread('lena. jpg', cv2. IMREAD_GRAYSCALE)
sobelx = cv2. Sobel(img, cv2. CV_64F, 1,0, ksize=3)
sobelx = cv2. convertScaleAbs(sobelx)
sobely = cv2. Sobel(img, cv2. CV_64F, 0,1, ksize=3)
sobely = cv2. convertScaleAbs(sobely)
sobelxy = cv2. addWeighted(sobelx,0.5, sobely,0.5,0)
cv_show(sobelxy,'sobelxy')

#模糊重影
img = cv2. imread('lena. jpg', cv2. IMREAD_GRAYSCALE)
sobelxy=cv2. Sobel(img,cv2. CV_64F,1,1,ksize=3)
sobelxy = cv2. convertScaleAbs(sobelxy)
cv_show(sobelxy,'sobelxy')

Scharr

 Scharr算子Gy写错了,第三行应该全是正数

 调整ksize可以获得老师那种效果,本质两种算子很相似

iaplacian

噪点敏感

#不同算子的差异
img = cv2. imread('lena. jpg', cv2. IMREAD_GRAYSCALE)
sobelx = cv2. Sobel(img, cv2. CV_64F,1, 0, ksize=3)
sobely = cv2. Sobel(img, cv2. CV_64F,0, 1, ksize=3)
sobelx = cv2. convertScaleAbs(sobelx)
sobely = cv2. convertScaleAbs(sobely)
sobelxy = cv2. addWeighted(sobelx,0.5, sobely,0.5,0)
scharrx = cv2. Scharr(img, cv2. CV_64F,1,0)
scharry = cv2. Scharr(img, cv2. CV_64F,0,1)
scharrx = cv2. convertScaleAbs(scharrx)
scharry = cv2. convertScaleAbs(scharry)
scharrxy = cv2. addWeighted(scharrx,0.5, scharry,0.5,0)
laplacian = cv2.Laplacian(img, cv2. CV_64F)
laplacian = cv2. convertScaleAbs(laplacian)
res = np. hstack(sobelxy, scharrxy, laplacian))
cv_show(res,'res')

Canny边缘检测

完成一个平滑处理

检测流程
非极大值抑制
双阈值检测

设置阈值是为了找出有效边界。有些地方是极点,但可能这个极点并不明显、差别很小(不在阈值里),那它就不是我们想要的边界 边界是垂直于差值连线的,如果旁边有类似差值较大的,但他本身差值不大,有可能也是边界 梯度其实就是差值,有差值两像素连线,差值到一定程度就视为边界 这里的梯度应该是使用sobel内核对平滑后的图像进行滤波得到的图像的像素点

 这里的梯度称之为邻近像素的差值或许更为恰当 

  

img=cv2. imread("lena. jpg", cv2. IMREAD_GRAYSCALE)
v1=cv2.Canny(img,80,150)
v2=cv2.Canny(img,50,100)
res = np. hstack(v1, v2))
cv_show(res,'res')
img=cv2. imread("car. png", cv2. IMREAD_GRAYSCALE)
v1=cv2.Canny(img,120,250)
v2=cv2.Canny(img,50,100)
res = np. hstack((v1,v2))
cv_show(res,'res')

图像金字塔

maxpooling FPN 

这是图像金字塔,FPN是特征金字塔,提现的是特征深度的叠加

高斯金字塔 

 图中应为1/256

跟resize不一样的,resize像素点信息不变

img=cv2.imread("AM.png")
cv_show(img,'img')
print(img. shape)

(442,340,3)

up=cv2.pyrUp(img)
cv_show(up,'up')
print (up. shape)

(884,680.3)

down=cv2. pyrDown(img)
cv_show(down,'down')
print(down. shape)

(221,170,3)

up2=cv2.pyrUp(up)
cv_show(up2,'up2')
print (up2. shape)

(1768,1360,3)

up=cv2. pyrUp(img)
up_down=cv2.pyrDown(up)
cv_show(up_down,'up_down')

cv_show(np. hstack((img, up_down),'up_down')

up=cv2.pyrUp(img)
up_down=cv2.pyrDown(up)
cv_show(img-up_down,'img-up_down')
#第47是原图减去先上采样再下采样的结果

拉普拉斯金字塔

这个是像素的缺失 应用:制作电子包浆(doge)

 尺寸报错的原图缩短一行或者一列就可以了,这个要求行和列都是偶数  直接相减不行,因为大小不一样,要用到cv2.resize处理

#如果因为图像是奇数而导致大小不一样的,可以换个顺序,先变大再变小
down=cv2. pyrDown(img)
down_up=cv2. pyrUp(down)
1_1=img-down_up
cv_show(1_1,'1_1')

轮廓检测方法

cv_show('thresh',thresh)是什么

边缘是零散的点,轮廓是个整体 

做科研的,以前一直用的RA写的code做图像处理,现在终于看懂了耶

cv2.findContours(img,mode,method)
mode:轮廓检索模式
• RETR_EXTERNAL :只检索最外面的轮廓;
• RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;
• RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;
• RETR_TREE:检索所有的轮廓,并也构嵌套轮廓的整个层次:
method:轮廓逼近方法 ^
• CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
• CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。
img = cv2. imread('car. png')#数据
gray = cv2. cvtColor(img, cv2. C0L0R_BGR2GRAY)#灰度
ret, thresh = cy2. threshold(gray, 127, 255, cv2. THRESH_BIXARY)#转换
cv_show(thresh.' thresh')

binary, contours, hierarchy = cv2. findContours(thresh, cv2.RETR_TREE,cv2.CHAIX_APPROX_NOXE)

4.6.0无binary,findContours只输出两个参数

旧版本返回三个值,新版本返回两个值,把binary删掉就OK 

cv_show(img,'img')

#传入绘制图像,轮廓,轮廓索引,颜色模式,线条厚度
#注意需要copy,要不原图会变。。。python中都是对象 直接赋值的话就是同一个对象 np中的copy是深拷贝,深拷贝会创建一个新的对象 和img对象的内容一致

draw_img = img. copy ()
res = cv2. drawContours(img, contours,-1,(0,0,255), 2)
#图像 是什么轮廓 第几个轮廓 bgr 线条宽度
#最新版本的话,第一个参数就是contours 
#如果这步报错,可能是OPENCV版本高的原因,前面值只留下contours,hierarchy 两值
cv_show (res,'res')

draw_img = img. copy()
res = cv2. drawContours(draw_img, contours, 0,(0,0, 255),2)
cv_show(res,'res')

待完工

待完工

待完工

待完工

待完工

待完工

待完工

待完工

待完工

待完工

相关推荐

  1. python opencv基础初学

    2024-03-26 05:58:07       42 阅读
  2. 初学gsap记录

    2024-03-26 05:58:07       36 阅读
  3. Scikit-learn 基础教程:机器学习初步指南

    2024-03-26 05:58:07       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 05:58:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 05:58:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 05:58:07       82 阅读
  4. Python语言-面向对象

    2024-03-26 05:58:07       91 阅读

热门阅读

  1. 数据分析面试题(11~20)

    2024-03-26 05:58:07       46 阅读
  2. Web框架开发-BBS项目预备知识

    2024-03-26 05:58:07       36 阅读
  3. linux系统中docker镜像创建、导入导出和执行

    2024-03-26 05:58:07       40 阅读
  4. H3CNE:FTP

    H3CNE:FTP

    2024-03-26 05:58:07      40 阅读
  5. 502(bad gateway),404等网页状态码

    2024-03-26 05:58:07       39 阅读
  6. 【Docker】docker和docker-compose一键安装脚本(linux)

    2024-03-26 05:58:07       39 阅读
  7. Istio 部署 Spring Coud 微服务应用

    2024-03-26 05:58:07       32 阅读
  8. Word字号与磅值与行距

    2024-03-26 05:58:07       44 阅读
  9. 洛谷刷题 | B3623 枚举排列

    2024-03-26 05:58:07       37 阅读
  10. 图论记录之最短路迪杰斯特拉

    2024-03-26 05:58:07       40 阅读
  11. 文心一言 vs GPT-4 —— 全面横向比较

    2024-03-26 05:58:07       38 阅读
  12. Sequelize一个易用且基于 promise 的 Node.js ORM 工具

    2024-03-26 05:58:07       36 阅读