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[ ]:
复制代码

原始图片:

 

posted @   {hunter}ZY  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示