opencv
#!/usr/bin/env python # coding: utf-8 # In[1]: import cv2 as cv import numpy as np from IPython.display import Image # In[2]: fname = "11" ftype = ".jpg" img = cv.imread(f"{fname}{ftype}") #读取图片 # In[3]: cv.imwrite(f"{fname}_img0{ftype}", img) #保存图片 Image(f"{fname}_img0{ftype}", height=300, width=300) #查看图片,查看的长宽都是300像素 # In[4]: img.shape # In[5]: #cvtColor是颜色空间转换函数,可以实现RGB颜色向HSV、HSI等颜色空间的转换,也可以转换为灰度图像。 img0 = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #对图片灰度处理 # In[6]: cv.imwrite(f"{fname}_img0{ftype}", img0) #保存图片 Image(f"{fname}_img0{ftype}", height=300, width=300) #查看图片,查看的长宽都是300像素 # In[7]: img1 = cv.resize(img, (200, 300)) #尺寸调整 # In[8]: cv.imwrite(f"{fname}_img1{ftype}", img1) #保存图片 Image(f"{fname}_img1{ftype}", height=300, width=300) #查看图片,查看的长宽都是300像素 # In[ ]: # In[9]: img2 = img[200:300, 200:300] #图片截取 # In[10]: cv.imwrite(f"{fname}_img2{ftype}", img2) #保存图片 Image(f"{fname}_img2{ftype}", height=300, width=300) #查看图片,查看的长宽都是300像素 # In[11]: #置换图片 img3 = img.copy() for i in range(200, 300): for j in range(200, 300): img3[i, j] = img0[i, j] # In[12]: cv.imwrite(f"{fname}_img3{ftype}", img3) #保存图片 Image(f"{fname}_img3{ftype}", height=300, width=300) #查看图片 # In[13]: img4 = img.copy() img4 = cv.line(img4, (100,100), (200,200), (255,0,255),10)#作图,最后一个参数是线条宽度 img4 = cv.rectangle(img4, (100,100), (200,200), (0,255,0), 4) img4 = cv.circle(img4, (600,150), 100, (0,0,255), 3) pts = np.array([[120,20],[120,10],[140,90],[50,90]]) img4 = cv.polylines(img4, [pts], True, (255,255,255), 2) # cv2.ellipse(img, center, axes, rotateAngle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) # In[14]: cv.imwrite(f"{fname}_img4{ftype}", img4) #保存图片 Image(f"{fname}_img4{ftype}", height=300, width=300) #查看图片 # In[15]: #图片颜色取反 img5 = img.copy() img5 = 255 - img5 # In[16]: cv.imwrite(f"{fname}_img5{ftype}", img5) #保存图片 Image(f"{fname}_img5{ftype}", height=300, width=300) #查看图片 # In[17]: #灰度二值处理,将图像上的像素点的灰度值设置为0或255 img6 = img0.copy() ret, im_fixed = cv.threshold(img6, 60, 255, cv.THRESH_BINARY) #这里的第一个参数是要改变的图片,第二个是阈值,第三个是阈值的最大值 img6 = im_fixed.copy() # In[18]: cv.imwrite(f"{fname}_img6{ftype}", img6) #保存图片 Image(f"{fname}_img6{ftype}", height=300, width=300) #查看图片 # In[19]: #灰度gamma处理,gamma 补偿可以增加图片像素低的部分的对比度,减小图片像素高的部分的对比度。 #即也就是图片黑的地方可以看得更清晰,图片亮的地方会变得更模糊。 import copy img7 = copy.deepcopy(img0) #深拷贝,拷贝出的的东西和原来的东西是完全不同的的东西 rows, cols = img7.shape for i in range(rows): for j in range(cols): img7[i][j] = 3 * pow(img7[i][j], 0.8) #(img7的0.8次方)乘3 # In[20]: cv.imwrite(f"{fname}_img7{ftype}", img7) #保存图片 Image(f"{fname}_img7{ftype}", height=300, width=300) #查看图片 # In[21]: #图片轮廓 imgA = img.copy() imgray = cv.cvtColor(imgA, cv.COLOR_BGR2GRAY) #对图片进行灰度处理 ret, thresh = cv.threshold(imgray, 127, 255, cv.THRESH_BINARY) #灰度二值处理,返回的ret和输入的阈值一样,即127 contours, hierarchy = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE) #轮廓检测函数 imgA[:] = 255 cv.drawContours(imgA, contours, -1, (0,0,255), 1) # In[22]: cv.imwrite(f"{fname}_imgA{ftype}", imgA) #保存图片 Image(f"{fname}_imgA{ftype}", height=300, width=300) #查看图片 # In[23]: #图片融合 img8_1 = img.copy() img8_2 = cv.imread(f"titlescreen{ftype}") #读取图片,这个是植物大战僵尸的经典界面 # In[27]: img8_2=cv.resize(img8_2,(720,405))#720是列,405是行 # In[55]: #图片简单融合 #img8_1 = cv.add(img8_1,img8_2) img8_1 = img8_1+img8_2 # In[56]: cv.imwrite(f"{fname}_img8_1{ftype}", img8_1) #保存图片 Image(f"{fname}_img8_1{ftype}", height=300, width=300) #查看图片 # In[67]: #图片条件融合 img9_1 = img.copy() img9_2 = img8_2 img9_1 = img9_1 * 1.25 + img9_2 * 0.75 # In[68]: cv.imwrite(f"{fname}_img9_1{ftype}", img9_1) #保存图片 Image(f"{fname}_img9_1{ftype}", height=300, width=300) #查看图片 # In[74]: #图片颜色分割 imgC = img8_2.copy() imgCb, imgCg, imgCr = cv.split(imgC) # In[77]: cv.imwrite(f"{fname}imgCb{ftype}", imgCb) #保存图片 Image(f"{fname}imgCb{ftype}", height=300, width=300) #查看图片 # In[78]: #图片颜色融合 imgD_1 = img.copy() imgD1b, imgD1g, imgD1r = cv.split(imgD_1) imgD_2 = img8_2 imgD2b, imgD2g, imgD2r = cv.split(imgD_2) # 取图2颜色G部分融合至图1 imgD = cv.merge((imgD1b, imgD2g, imgD1r)) # In[79]: cv.imwrite(f"{fname}imgD{ftype}", imgD) #保存图片 Image(f"{fname}imgD{ftype}", height=300, width=300) #查看图片 # In[158]: #图片翻转 imgE = img8_2.copy() imgE = cv.flip(imgE, 1) # In[91]: cv.imwrite(f"{fname}imgE{ftype}", imgE) #保存图片 Image(f"{fname}imgE{ftype}", height=300, width=300) #查看图片 # In[139]: #图片平移 imgF = img.copy() rows, cols = imgF.shape[:2] #截取shape的前两维,不包括三通道 M = np.float32([[1,0, 400], [0, 1, 100]]) #这里的400和100分别表示向右和向下平移400和100 imgF = cv.warpAffine(imgF, M, (cols, rows)) # In[138]: cv.imwrite(f"{fname}imgF{ftype}", imgF) #保存图片 Image(f"{fname}imgF{ftype}", height=300, width=300) #查看图片 # In[154]: #图片旋转 imgG = img.copy() rows, cols = imgG.shape[:2] M = cv.getRotationMatrix2D((cols/2, rows/2), 45, 0.5) #(cols/2, rows/2)是旋转的中心点,45是旋转角度,0.5是图片缩放背书 imgG = cv.warpAffine(imgG, M, (cols, rows)) # In[155]: cv.imwrite(f"{fname}imgG{ftype}", imgG) #保存图片 Image(f"{fname}imgG{ftype}", height=300, width=300) #查看图片 # In[166]: #图片平滑 # 均值滤波 imgH1 = img.copy() imgH1 = cv.blur(imgH1, (20, 20)) #均值滤波,类似于卷积操作,核的大小为(20,20),求这个大小的感受野的均值 # In[164]: cv.imwrite(f"{fname}imgH1{ftype}", imgH1) #保存图片 Image(f"{fname}imgH1{ftype}", height=300, width=300) #查看图片 # In[167]: # 方框滤波 imgH2 = img.copy() imgH2 = cv.boxFilter(imgH2, -1, (20, 20), normalize=True) #normalize=True则实际上也是均值滤波 # In[168]: cv.imwrite(f"{fname}imgH2{ftype}", imgH2) #保存图片 Image(f"{fname}imgH2{ftype}", height=300, width=300) #查看图片 # In[178]: # 高斯滤波 imgH3 = img.copy() imgH3 = cv.GaussianBlur(imgH3, (21, 21), 1) # In[177]: cv.imwrite(f"{fname}imgH3{ftype}", imgH3) #保存图片 Image(f"{fname}imgH3{ftype}", height=300, width=300) #查看图片 # In[179]: # 中值滤波 imgH4 = img.copy() imgH4 = cv.medianBlur(imgH4, 21) # In[180]: cv.imwrite(f"{fname}imgH4{ftype}", imgH4) #保存图片 Image(f"{fname}imgH4{ftype}", height=300, width=300) #查看图片 # In[181]: # 双边滤波 imgH5 = img.copy() imgH5 = cv.bilateralFilter(imgH5, 9, 75, 75) # In[182]: cv.imwrite(f"{fname}imgH5{ftype}", imgH5) #保存图片 Image(f"{fname}imgH5{ftype}", height=300, width=300) #查看图片 # In[ ]:
原始图片:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示