05-图像的美化

一、彩色图片直方图

cv2.calcHist([image],[0],None,[256],[0.0,255.0])
该方法的所有参数都必须用中括号括起来!!!
参数一:传入的图片数据
参数二:用于计算直方图的通道,这里使用的是灰度直方图,所以就使用第一个通道,第一个通道下标是0
参数三:mask模板,这里没有用,所以给个None
参数四:直方图的横坐标尺度size,表明直方图分成多少份,或有多少个柱状;256表示0-255总共256个灰度值
参数五:直方图中各个像素的值0.0-255.0表明从0.0开始已知到255.0所以的像素都进行遍历,因为灰度值只能是0-255之内

cv2.minMaxLoc(hist)
计算当前hist这个直方图中的最小值、最大值、最小值对应的下标和最大值对应的下标

cv2.split(img)
图像分解,将彩色图片的RGB分解为R G B三个通道

import cv2
import numpy as np
def ImageHist(image,type):color = (255,255,255)#定义当前颜色为白色windowName = 'Gray'#定义一个windows窗体if type == 31:#蓝色直方图color = (255,0,0)windowName = 'B Hist'elif type == 32:#绿色直方图color = (0,255,0)windowName = 'G Hist'elif type == 33:#红色直方图color = (0,0,255)windowName = 'R Hist'hist = cv2.calcHist([image],[0],None,[256],[0.0,255.0])#计算直方图方法minV,maxV,minL,maxL = cv2.minMaxLoc(hist)#计算当前hist这个直方图中的最大值、最小值以及其分别对应的下标histImg = np.zeros([256,256,3],np.uint8)for h in range(256):intenNormal = int(hist[h]*256/maxV)#将所有的像素值归到0-256之间,将图片上的像素进行归一化操作cv2.line(histImg,(h,256),(h,256-intenNormal),color)cv2.imshow(windowName,histImg)return histImgimg = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
channels = cv2.split(img)# 图像分解,将RGB图片分解为R G B三个通道
for i in range(0,3):#遍历颜色通道0、1、2ImageHist(channels[i],31+i)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

二、直方图均衡化

灰度图片的直方图均衡化

cv2.equalizeHist(gray)
灰度图的均衡化方法,只需要传入一个灰度图即可,其实针对的是一个颜色通道,若是彩色图片有三个颜色通道需要分三次进行均衡化

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/Aa.jpg',1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将彩色图转换为灰度图
cv2.imshow('src',gray)
dst = cv2.equalizeHist(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下(左原图,右均衡化图片):
在这里插入图片描述

彩色图片的直方图均衡化

cv2.split(img)
图像分解,将彩色图片的RGB分解为R G B三个通道

cv2.merge((bH,gH,rH))
将单一的颜色通道进行合成到一起

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/Aa.jpg',1)
cv2.imshow('src',img)
(b,g,r) = cv2.split(img)#通道分解
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
result = cv2.merge((bH,gH,rH))# 通道合成
cv2.imshow('dst',result)
cv2.waitKey(0)

效果图如下(左原图,右均衡化图片):
在这里插入图片描述

YUV图像的直方图均衡化

yuv是一种类似rgb的颜色模型,起源于黑白和彩电的过渡时期。
其中Y代表亮度,uv组合起来可以表示色度。
yuv信息只有y的信息就足以显示黑白的图片,
yuv和YCbCr表示相同的东西,且Cb严格对应U,Cr严格对应V

cv2.split(imgYUV)
图像分解,将彩色图片的RGB分解为R G B三个通道

cv2.equalizeHist(channelYUV[0])
对第一个颜色通道拿出来进行均衡化

cv2.merge(channelYUV)
将单一的颜色通道进行合成到一起

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/Aa.jpg',1)
imgYUV = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)#将BGR彩色图片转换为YUV图片
cv2.imshow('src',img)
channelYUV = cv2.split(imgYUV)
channelYUV[0] = cv2.equalizeHist(channelYUV[0])
channels = cv2.merge(channelYUV)
result = cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR)#将YUV图片转换为BGR彩色图片
cv2.imshow('dst',result)
cv2.waitKey(0)

效果图如下(左原图,右均衡化图片):
在这里插入图片描述

三、图片修补

cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA)
参数一:毁坏的图片
参数二:修复的内容部分,mask模板
参数三:修复图片的线条粗细值。由于毁坏图片的时候进行的三个像素格的毁坏,故这里修复的线条粗细值为3
参数四:图片修复类型

对一张图片进行毁坏,并保存,这里使用的是改变图片中某位置的像素值从而达到毁坏图片的目的

import cv2 
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
for i in range(200,300):#对图片进行画线进行毁坏img[i,200] = (255,255,255)img[i,200+1] = (255,255,255)img[i,200-1] = (255,255,255)
for i in range(150,250):#对图片进行画线进行毁坏img[250,i] = (255,255,255)img[250+1,i] = (255,255,255)img[250-1,i] = (255,255,255)cv2.imwrite('E:\Jupyter_workspace\study\data/damaged.jpg',img)#保存一下毁坏的图片
cv2.imshow('image',img)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述
对毁坏的图片进行制作修复模板mask来修复图片

import cv2 
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/damaged.jpg',1)#读取毁坏的图片信息
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
paint = np.zeros((height,width,1),np.uint8)for i in range(200,300):#填补的模板参数,也就是刚才所绘制的画线paint[i,200] = 255#为了使得线段更加paint[i,200+1] = 255paint[i,200-1] = 255
for i in range(150,250):paint[250,i] = 255paint[250+1,i] = 255paint[250-1,i] = 255
cv2.imshow('paint',paint)imgDst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA)#定义目标图片,即修复之后的图片cv2.imshow('image',imgDst)
cv2.waitKey(0)

效果图如下(左毁坏图片,中修复模板mask掩模,右修复过后的图片):

在这里插入图片描述

四、灰度直方图源码

灰度直方图的本质:统计每个像素灰度值出现的概率0-255

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('E:\Jupyter_workspace\study/w1.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
count = np.zeros(256,np.float)
for i in range(0,height):for j in range(0,width):pixel = gray[i,j]index = int(pixel)count[index] = count[index]+1
for i in range(0,255):count[i] = count[i]/(height*width)
x = np.linspace(0,255,256)
y = count
plt.bar(x,y,0.9,alpha=1,color='r')
plt.show()
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

五、彩色直方图源码

彩色直方图的本质:分别统计每个颜色通道上的像素值出现的概率0-255

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('E:\Jupyter_workspace\study/w1.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]#对每个颜色通道上的像素值进行统计
count_b = np.zeros(256,np.float)
count_g = np.zeros(256,np.float)
count_r = np.zeros(256,np.float)for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]#图片的像素值信息读取到元组(b,g,r)中index_b = int(b)#将像素值转换为int类型便于统计index_g = int(g)index_r = int(r)count_b[index_b] = count_b[index_b]+1#实现blue这个颜色通道上的像素的统计count_g[index_g] = count_g[index_g]+1count_r[index_r] = count_r[index_r]+1
for i in range(0,256):#遍历每一个像素等级count_b[i] = count_b[i]/(height*width)#对像素值出现的个数进行归一化处理count_g[i] = count_g[i]/(height*width)count_r[i] = count_r[i]/(height*width)
x = np.linspace(0,255,256)#从0开始,到255结束,一共256个
y1 = count_b
plt.figure()
plt.bar(x,y1,0.9,alpha=1,color='b')#绘制blue颜色通道的柱状图
y2 = count_g
plt.figure()
plt.bar(x,y2,0.9,alpha=1,color='g')
y3 = count_r
plt.figure()
plt.bar(x,y3,0.9,alpha=1,color='r')
plt.show()
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

六、灰度直方图均衡化

本质:统计每个像素灰度 出现的概率 0-255
累计概率

灰度等级出现的概率累积概率
10.20.1
20.30.5=0.2+0.3
30.10.6=0.2+0.3+0.1

总共256个灰度等级,每个灰度等级都会有一个出现概率,也都会有一个累积概率

灰度等级(100),累积概率(0.5),100到这个新值之间的映射(2550.5),以后所有的100等级这个像素都使用2550.5进行替代,替代完成之后就是直方图的均衡化

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
#cv2.imshow('img',img)imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
count = np.zeros(256,np.float)
for i in range(0,height):for j in range(0,width):pixel = gray[i,j]index = int(pixel)count[index] = count[index]+1
for i in range(0,255):count[i] = count[i]/(height*width)
#计算累计概率
sum1 = float(0)
for i in range(0,256):sum1 = sum1+count[i]count[i] = sum1
#print(count)
# 计算映射表
map1 = np.zeros(256,np.uint16)
for i in range(0,256):map1[i] = np.uint16(count[i]*255)
# 映射
for i in range(0,height):for j in range(0,width):pixel = gray[i,j]gray[i,j] = map1[pixel]
cv2.imshow('dst',gray)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

七、彩色直方图均衡化

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
cv2.imshow('src',img)imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]count_b = np.zeros(256,np.float)
count_g = np.zeros(256,np.float)
count_r = np.zeros(256,np.float)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]index_b = int(b)index_g = int(g)index_r = int(r)count_b[index_b] = count_b[index_b]+1count_g[index_g] = count_g[index_g]+1count_r[index_r] = count_r[index_r]+1
for i in range(0,255):count_b[i] = count_b[i]/(height*width)count_g[i] = count_g[i]/(height*width)count_r[i] = count_r[i]/(height*width)
#计算累计概率
sum_b = float(0)
sum_g = float(0)
sum_r = float(0)
for i in range(0,256):sum_b = sum_b+count_b[i]sum_g = sum_g+count_g[i]sum_r = sum_r+count_r[i]count_b[i] = sum_bcount_g[i] = sum_gcount_r[i] = sum_r
#print(count)
# 计算映射表
map_b = np.zeros(256,np.uint16)
map_g = np.zeros(256,np.uint16)
map_r = np.zeros(256,np.uint16)
for i in range(0,256):map_b[i] = np.uint16(count_b[i]*255)map_g[i] = np.uint16(count_g[i]*255)map_r[i] = np.uint16(count_r[i]*255)
# 映射
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]b = map_b[b]g = map_g[g]r = map_r[r]dst[i,j] = (b,g,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

八、亮度增强

实现思路:在原来的亮度基础上+40,从而达到亮度增强的效果

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('src',img)
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]bb = int(b)+40gg = int(g)+40rr = int(r)+40if bb>255:bb = 255if gg>255:gg = 255if rr>255:rr = 255dst[i,j] = (bb,gg,rr)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述
当然也可以改变颜色通道乘以一个比例系数再加上一个常数的方法实现美白效果
例如:(b1.3)+10、(g1.2)+15、r不变

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/cat.png',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('src',img)
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]bb = int(b*1.3)+10gg = int(g*1.2)+15if bb>255:bb = 255if gg>255:gg = 255dst[i,j] = (bb,gg,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

九、磨皮美白

调用API双边滤波
双边滤波:高斯滤波核g+距离核r,进行加权算出一个共同的核p,并用当前的和乘以像素,与像素进行卷积,就可以得到一个新的像素,这个新的像素就是经过双边滤波后的像素

import cv2
img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',1)
cv2.imshow('src',img)
dst = cv2.bilateralFilter(img,15,35,35)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

十、高斯、均值滤波

滤波0的本质:矩阵对应点相乘并求和
在这里插入图片描述
右边是卷积核,为啥成1/16,是因为这个卷积元素之和为16,而且这个卷积核越中间值越大,越两边值越小

高斯滤波使用API的方式进行调用

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',1)
cv2.imshow('src',img)
dst = cv2.GaussianBlur(img,(5,5),1.5)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述
均值滤波使用源码方式进行调用(为了防止溢出,图像边缘并进行处理)
首先定义一个模板,比如66的模板,数据全为1,用这个全为1的模板数据 乘以 一个66矩阵中的所有的数据,乘完之后再除以36,这样便得到一个均值,把这个均值替换掉原来的像素值,则实现均值滤波效果

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width,3),np.uint8)
for i in range(3,height-3):for j in range(3,width-3):sum_b = int(0)sum_g = int(0)sum_r = int(0)for m in range(-3,3):#-3 -2 -1 0 1 2for n in range(-3,3):(b,g,r) = img[i+m,j+n]sum_b = sum_b+int(b)sum_g = sum_g+int(g)sum_r = sum_r+int(r)b = np.uint8(sum_b/36)g = np.uint8(sum_g/36)r = np.uint8(sum_r/36)dst[i,j] = (b,g,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

十一、中值滤波

算法思路:假如定义一个3*3的模板,这个模板中一共有9个像素,将这9个像素进行排序,排序之后选择中间的那个像素值去代替其他像素值

import cv2
import numpy as np
img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
img = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
cv2.imshow('src',img)
dst = np.zeros((height,width,3),np.uint8)
collect = np.zeros(9,np.uint8)
for i in range(1,height-1):for j in range(1,width-1):k = 0for m in range(-1,2):#-1 0 1for n in range(-1,2):gray = img[i+m,j+n]collect[k] = grayk = k+1for k in range(0,9):#冒泡排序,从前往后比较,每轮比较选出最大值放到最后面p1 = collect[k]for t in range(k+1,9):if p1<collect[t]:mid = collect[t]collect[t] = p1p1 = middst[i,j] = collect[4]#该值就是中间值,用中间值去代替所有的像素值
cv2.imshow('dst',dst)
cv2.waitKey(0)

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse for android 中设置java和xml代码提示功能(转)

1、设置 java 文件的代码提示功能 打开 Eclipse 依次选择 Window > Preferences > Java > Editor - Content Assist > Auto activation triggers for Java &#xff0c;设置框中默认是一个点&#xff0c; 现在将它改为&#xff1a; 以下为引用内容&#xff1a; .a…

如何利用FFT(基2时间以及基2频率)信号流图求序列的DFT

直接用两个例子作为模板说明&#xff1a; 利用基2时间抽取的FFT流图计算序列的DFT 1、按照序列x[k]序号的偶奇分解为x[k]和x2[k]&#xff0c;即x1[k]{1,1,2,1}, x2[k]{-1,-1,1,2} 2、画出信号流图并同时进行计算 计算的时候需要参考基本蝶形单元&#xff1a; 关键在于 (WN) k…

matlab4.0,matlab 4.0

4.1fort-9:0.5:9if(t>0)y-(3*t^2)5;fprintf(y%.2ft%.2f\n,y,t);elsey(3*t^2)5;fprintf(y%.2ft%.2f\n,y,t);endend编译结果&#xff1a;y248.00t-9.00y221.75t-8.50y197.00t-8.00y173.75t-7.50y152.00t-7.00y131.75t-6.50y113.00t-6.00y95.75t-5.50y80.00t-5.00y65.75t-4.50y…

图形学 射线相交算法_计算机图形学中的阴极射线管

图形学 射线相交算法阴极射线管 (Cathode Ray Tube) Ferdinand Barun of Strasbourg developed the cathode ray tube in the year 1897. It used as an oscilloscope to view and measure some electrical signals. But several other technologies exist and solid state mov…

Constructor总结

一个类如果没有构造那么系统为我们在背后创建一个0参数的构造&#xff0c;但是一旦我们创建了但参数的构造&#xff0c;那么默认的构造就没了。 View Code 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 6 namespace Console…

Python连接MySQL及一系列相关操作

一、首先需要安装包pymysql(python3所对应) 我使用的是Anaconda全家桶&#xff0c;打开cmd&#xff0c;进入Anaconda下的Scripts文件夹下输入命令&#xff1a;pip install pymysql进行下载安装 二、我使用的编译器为Anaconda所带的Jupyter Notebook 1&#xff0c;在mysql中…

微机原理—可编程计数器/定时器8253概念详解

目录前言【1】定时处理方法1、定时的方法&#xff1a;2、定时和计数器【2】8253计数/定时器1、特点&#xff1a;2、芯片引脚以及电路&#xff1a;3、连接方式&#xff1a;4、工作原理&#xff1a;5、寄存器配置a、初始化操作&#xff08;三个通道单独初始化&#xff09;b、读出…

形参与实参在函数中的传递

#include <iostream> #include <cstring> using namespace std; void myFun(int a[]); int main() {int a[10];cout<<"aaa"<<sizeof(a)<<endl;//40 int为4&#xff0c;a为10个int&#xff0c;故为40cout<<"yy"<<…

带你走进缓存世界

我们搞程序的多多少少都了解点算法。总体来讲&#xff0c;算法是什么&#xff1f;算法就是“时间”和“空间”的互换策略。我们常常考究一个算法的时间复杂度或空间复杂度&#xff0c;如果我们有绝对足够的时间或空间&#xff0c;那么算法就不需要了&#xff0c;可惜这种条件是…

霍夫码编码(一种不等长,非前缀编码方式)

霍夫曼编码是一种不等长非前缀编码方式&#xff0c;于1951年由MIT的霍夫曼提出。 用于对一串数字/符号编码获取最短的结果&#xff0c;获取最大的压缩效率。 特点&#xff1a;不等长、非前缀 等长式编码 等长编码&#xff0c;意思是对出现的元素采用相同位数的序号进行标定&a…

JS 获取浏览器信息,给出友情提示,避免部分兼容性问题

最近在做webform,浏览器兼容是个问题,这里我收集了一些获取浏览器信息的资料,可以给一些用户使用时,提示浏览器版本过低,让升级版本用. 这样会给开发的我们,省下很多用来调试兼容性的时间和精力. 本人就是这样想的 ~  检测浏览器及版本使用 JavaScript 检测关于访问者的浏览器…

06-机器学习(Haar+Adaboost实现人脸、人眼检测)

机器学习是什么? 机器学习训练样本特征分类器&#xff0c;通过让机器学习的方式&#xff0c;来达到某种功能的过程 深度学习是什么&#xff1f; 深度学习海量的学习样本人工神经网络 机器学习需要&#xff1a;样本、特征、分类器、对训练后的数据进行预测或检验 人脸样本haar…

Opencv实战【3】——图像修复与图像锐化(darling in the franxx)

目录前言图像修复图像锐化darling in the franxx图片总结前言 前天&#xff0c;在群里看见有人发了这张表情包&#xff1a; 感觉女主有点好看&#xff0c;然后问室友是啥番剧&#xff08;darling in the franxx&#xff09;&#xff0c;然后就去补番了&#xff0c;然后从晚上…

07-机器学习(Hog+SVM实现小狮子识别)

一、SVM支持向量机 什么是SVM支持向量机&#xff1f; SVM支持向量机本质仍是一个分类器&#xff0c;其核心为寻求一个最优超平面最终实现分类&#xff0c;实现分类问题 在寻求超平面的时候有多种方式&#xff0c;可以使用若干条直线或曲线进行分类&#xff0c;这里使用的是直线…

Net Remoting基础篇

一、Remoting基础 什么是Remoting&#xff0c;简而言之&#xff0c;我们可以将其看作是一种分布式处理方式。从微软的产品角度来看&#xff0c;可以说Remoting就是DCOM的一种升 级&#xff0c;它改善了很多功能&#xff0c;并极好的融合到.Net平台下。Microsoft .NET Remoting …

Maven3.0.5代理nexus

Nexus简介 Nexus是Sonatype推出的强大Maven仓库管理器产品&#xff0c;要比以前TSS上介绍的Artifactory要好使用的多&#xff0c;也是一个拆箱即用的Java App&#xff0c;内嵌Jetty容器和Java Wrapper做Windows服务&#xff0c;安装简单到解压然后双击install即可。更详细的帮助…

8253译码电路设计以及初始化编程讲解

先验知识回顾&#xff1a;知识点不清晰的时候可以查询相关知识点。 https://blog.csdn.net/qq_42604176/article/details/105810973 需掌握的主要知识点 1、译码电路设计 2、初始化编程 例题1 在以 8086构成的最大方式系统中&#xff0c;有一片8254的端口地址分别为301H、3…

基于图像处理的数码印花喷墨墨滴形状规范的研究(Python+OpenCV+Mysql)

大体思路&#xff1a;由于墨滴的不同参数会对墨滴的形态产生一定的影响&#xff0c;故如果通过研究墨滴的形态则通过海量的数据就可以大概确定墨滴的各项参数指标的范围。通过OpenCV对墨滴的喷出的形状进行图像处理&#xff0c;对墨滴图像进行一系列的分析&#xff0c;通过一系…

Opencv实战【4】——图片动漫化处理

博主联系方式&#xff1a; QQ:1540984562 微信&#xff1a;wxid_nz49532kbh9u22 QQ交流群&#xff1a;750313950 目录动漫化风格的特点处理手段代码实现效果总结动漫化风格的特点 &#xff08;1&#xff09;动漫中的细节相对少&#xff1b; &#xff08;2&#xff09;动漫中的边…

08-KNN手写数字识别

标签下载地址 文件内容备注train-images-idx3-ubyte.gz训练集图片&#xff1a;55000张训练图片&#xff0c;5000张验证图片train-labels-idx1-ubyte.gz训练集图片对应的数字标签t10k-images-idx3-ubyte.gz测试集图片&#xff1a;10000张图片t表示test&#xff0c;测试图片&…