当前位置: 首页 > news >正文

做网站定金交多少合适全网关键词优化公司哪家好

做网站定金交多少合适,全网关键词优化公司哪家好,owaspbwa wordpress,个人如何网站备案Python中使用opencv-python库进行颜色检测 之前写过一篇VC中使用OpenCV进行颜色检测的博文,当然使用opencv-python库也可以实现。 在Python中使用opencv-python库进行颜色检测非常简单,首选读取一张彩色图像,并调用函数imgHSV cv2.cvtColor…

Python中使用opencv-python库进行颜色检测

之前写过一篇VC++中使用OpenCV进行颜色检测的博文,当然使用opencv-python库也可以实现。
在Python中使用opencv-python库进行颜色检测非常简单,首选读取一张彩色图像,并调用函数imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用inRange函数imask = cv2.inRange(imgHSV,lower,upper)将HSV色彩图像转换成掩码图,掩码图中只有黑白二值图像,从而达到颜色检测的目的。颜色检测通常可以用于物体检测和跟踪中,尤其在不同的图像和物体中根据特定的颜色去筛选出某个物体。

通过学习油管博主murtazahassan的视频LEARN OPENCV in 3 HOURS with Python | Including 3xProjects | Computer Vision,里面第7个OpenCV示例将到如何从一副兰博基尼的轿车图像中进行颜色检测,相关代码地址为:Learn-OpenCV-in-3-hours
/chapter7.py
如下所示:

import cv2
import numpy as npdef empty(a):passdef stackImages(scale,imgArray):rows = len(imgArray)cols = len(imgArray[0])rowsAvailable = isinstance(imgArray[0], list)width = imgArray[0][0].shape[1]height = imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank = np.zeros((height, width, 3), np.uint8)hor = [imageBlank]*rowshor_con = [imageBlank]*rowsfor x in range(0, rows):hor[x] = np.hstack(imgArray[x])ver = np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] == imgArray[0].shape[:2]:imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor= np.hstack(imgArray)ver = horreturn verpath = 'Resources/lambo.png'
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,240)
cv2.createTrackbar("Hue Min","TrackBars",0,179,empty)
cv2.createTrackbar("Hue Max","TrackBars",19,179,empty)
cv2.createTrackbar("Sat Min","TrackBars",110,255,empty)
cv2.createTrackbar("Sat Max","TrackBars",240,255,empty)
cv2.createTrackbar("Val Min","TrackBars",153,255,empty)
cv2.createTrackbar("Val Max","TrackBars",255,255,empty)while True:img = cv2.imread(path)imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)h_min = cv2.getTrackbarPos("Hue Min","TrackBars")h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")v_min = cv2.getTrackbarPos("Val Min", "TrackBars")v_max = cv2.getTrackbarPos("Val Max", "TrackBars")print(h_min,h_max,s_min,s_max,v_min,v_max)lower = np.array([h_min,s_min,v_min])upper = np.array([h_max,s_max,v_max])mask = cv2.inRange(imgHSV,lower,upper)imgResult = cv2.bitwise_and(img,img,mask=mask)# cv2.imshow("Original",img)# cv2.imshow("HSV",imgHSV)# cv2.imshow("Mask", mask)# cv2.imshow("Result", imgResult)imgStack = stackImages(0.6,([img,imgHSV],[mask,imgResult]))cv2.imshow("Stacked Images", imgStack)cv2.waitKey(1)

代码示例和运行结果

import cv2
import numpy as np"""
@param scale: 图像缩放比例系数
@param imgArray: 二维图像数组
"""
def stackImages(scale,imgArray):rows = len(imgArray)cols = len(imgArray[0])rowsAvailable = isinstance(imgArray[0], list)width = imgArray[0][0].shape[1]height = imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank = np.zeros((height, width, 3), np.uint8)hor = [imageBlank]*rowshor_con = [imageBlank]*rowsfor x in range(0, rows):hor[x] = np.hstack(imgArray[x])ver = np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] == imgArray[0].shape[:2]:imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor= np.hstack(imgArray)ver = horreturn ver# 进度条回调函数
"""
@param val: 用户选择的当前进度条的数值
"""
def onValueChanged(val):# print("val: ", val)pass# 颜色检测
path = "Resources/lambo.png"
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars", 640, 240) # 创建一个宽为640,高为200的,窗口名称为Trackbars的窗口
# 在窗口名称为Trackbars的窗口中创建一个名为Hue Min的滑动条,最小值默认为0,最大值为179,滑动条所在值即为hmin,用来控制H分量的最小值
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Hue Max的滑动条,最小值默认为0,最大值为179,滑动条所在值即为hmax,用来控制H分量的最大值
cv2.createTrackbar("Hue Max", "TrackBars", 19, 179, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Sat Min的滑动条,最小值默认为0,最大值为255,滑动条所在值即为smin,用来控制S分量的最小值
cv2.createTrackbar("Sat Min", "TrackBars", 110, 255, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Sat Max的滑动条,最小值默认为0,最大值为255,滑动条所在值即为smax,用来控制S分量的最大值
cv2.createTrackbar("Sat Max", "TrackBars", 240, 255, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Val Min的滑动条,最小值默认为0,最大值为255,滑动条所在值即为vmin,用来控制V分量的最小值
cv2.createTrackbar("Val Min", "TrackBars", 153, 255, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Val Max的滑动条,最小值默认为0,最大值为255,滑动条所在值即为vmax,用来控制V分量的最大值
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, onValueChanged)# 循环检测用户操作,用户可以通过Trackbars窗口中的滑动条分别控制H、S、V三个分量的最小和最大值,从而控制mask以及Result图像的最终呈现
while True:img = cv2.imread(path)imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)h_min = cv2.getTrackbarPos("Hue Min", "TrackBars")h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")v_min = cv2.getTrackbarPos("Val Min", "TrackBars")v_max = cv2.getTrackbarPos("Val Max", "TrackBars")print(h_min, h_max, s_min, s_max, v_min, v_max)lower = np.array([h_min, s_min, v_min])upper = np.array([h_max, s_max, v_max])mask = cv2.inRange(imgHSV, lower, upper)    # 根据lower和upper以及imgHSV图像生成mask图像imgResult = cv2.bitwise_and(img, img, mask=mask)# cv2.imshow("Original", img)# cv2.imshow("HSV", imgHSV)# cv2.imshow("Mask", mask)# cv2.imshow("Result", imgResult)imgStack = stackImages(0.6, ([img, imgHSV], [mask, imgResult]))cv2.imshow("Stacked Images", imgStack)cv2.waitKey(1)
cv2.destroyAllWindows()

运行结果如下图所示:
颜色检测运行结果

使用matplotlib库将多幅图像在一张图上显示

当然我们可以替换掉上面的stackImages(scale,imgArray),借助matplotlib`库将多幅图像在一张图上显示,相应的代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt# 进度条回调函数
"""
@param val: 用户选择的当前进度条的数值
"""
def onValueChanged(val):# print("val: ", val)pass# 颜色检测
path = "Resources/lambo.png"
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars", 640, 240) # 创建一个宽为640,高为200的,窗口名称为Trackbars的窗口
# 在窗口名称为Trackbars的窗口中创建一个名为Hue Min的滑动条,最小值默认为0,最大值为179,滑动条所在值即为hmin,用来控制H分量的最小值
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Hue Max的滑动条,最小值默认为0,最大值为179,滑动条所在值即为hmax,用来控制H分量的最大值
cv2.createTrackbar("Hue Max", "TrackBars", 19, 179, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Sat Min的滑动条,最小值默认为0,最大值为255,滑动条所在值即为smin,用来控制S分量的最小值
cv2.createTrackbar("Sat Min", "TrackBars", 110, 255, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Sat Max的滑动条,最小值默认为0,最大值为255,滑动条所在值即为smax,用来控制S分量的最大值
cv2.createTrackbar("Sat Max", "TrackBars", 240, 255, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Val Min的滑动条,最小值默认为0,最大值为255,滑动条所在值即为vmin,用来控制V分量的最小值
cv2.createTrackbar("Val Min", "TrackBars", 153, 255, onValueChanged)
# 在窗口名称为Trackbars的窗口中创建一个名为Val Max的滑动条,最小值默认为0,最大值为255,滑动条所在值即为vmax,用来控制V分量的最大值
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, onValueChanged)# 循环检测用户操作,用户可以通过Trackbars窗口中的滑动条分别控制H、S、V三个分量的最小和最大值,从而控制mask以及Result图像的最终呈现
while True:img = cv2.imread(path)imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)h_min = cv2.getTrackbarPos("Hue Min", "TrackBars")h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")v_min = cv2.getTrackbarPos("Val Min", "TrackBars")v_max = cv2.getTrackbarPos("Val Max", "TrackBars")print(h_min, h_max, s_min, s_max, v_min, v_max)lower = np.array([h_min, s_min, v_min])upper = np.array([h_max, s_max, v_max])imgMask = cv2.inRange(imgHSV, lower, upper)    # 根据lower和upper以及imgHSV图像生成mask图像imgResult = cv2.bitwise_and(img, img, mask=imgMask)# cv2.imshow("Original", img)# cv2.imshow("HSV", imgHSV)# cv2.imshow("Mask", mask)# cv2.imshow("Result", imgResult)plt.figure(figsize=(8, 6))plt.subplot(221), plt.axis('off'), plt.title("1.Original Image")plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))plt.subplot(222), plt.axis("off"), plt.title("2.HSV Image")plt.imshow(cv2.cvtColor(imgHSV, cv2.COLOR_BGR2RGB))plt.subplot(223), plt.axis("off"), plt.title("3.Mask Image")plt.imshow(cv2.cvtColor(imgMask, cv2.COLOR_BGR2RGB))plt.subplot(224), plt.axis("off"), plt.title("4.Result Image")# plt.imshow(imgResult)plt.imshow(cv2.cvtColor(imgResult, cv2.COLOR_BGR2RGB))plt.tight_layout()plt.show()cv2.waitKey(1)
cv2.destroyAllWindows()

VScode中运行结果如下图所示:
VSCode运行结果2
注意由于python-opencv中彩色图像默认是BGRmatplotlib库中默认是RGB,所以使用matplotlib库显示图像时,需要对原图像(BGR)使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)函数进行转换,不然图像显示不正确。如下图所示:
颜色不对

参考资料

  • HSL和HSV色彩空间
  • OpenCV—HSV色彩空间基础知识
  • 三分钟带你快速学习RGB、HSV和HSL颜色空间
  • Learn-OpenCV-in-3-hours Python Video
  • Learn-OpenCV-in-3-hours
  • Learn-OpenCV-cpp-in-4-Hours C++ Video
  • https://github.com/murtazahassan/Learn-OpenCV-cpp-in-4-Hours
  • https://github.com/murtazahassan

文章转载自:
http://ironworks.spbp.cn
http://unbeatable.spbp.cn
http://retribution.spbp.cn
http://unloved.spbp.cn
http://landdrost.spbp.cn
http://brut.spbp.cn
http://intropunitive.spbp.cn
http://misgovernment.spbp.cn
http://ashpit.spbp.cn
http://slopshop.spbp.cn
http://playwright.spbp.cn
http://ritualistic.spbp.cn
http://salpingography.spbp.cn
http://agal.spbp.cn
http://tetanal.spbp.cn
http://infrared.spbp.cn
http://phocine.spbp.cn
http://sunnite.spbp.cn
http://vagabondism.spbp.cn
http://totalitarianize.spbp.cn
http://tacnode.spbp.cn
http://placentology.spbp.cn
http://mephitis.spbp.cn
http://trophoneurosis.spbp.cn
http://transceiver.spbp.cn
http://apogamic.spbp.cn
http://polyoestrous.spbp.cn
http://incuriosity.spbp.cn
http://repp.spbp.cn
http://emulational.spbp.cn
http://hausfrau.spbp.cn
http://abandoner.spbp.cn
http://mammogen.spbp.cn
http://potch.spbp.cn
http://coated.spbp.cn
http://daymare.spbp.cn
http://virginia.spbp.cn
http://ruck.spbp.cn
http://whiff.spbp.cn
http://clementine.spbp.cn
http://captan.spbp.cn
http://swaddle.spbp.cn
http://heffalump.spbp.cn
http://hiberarchy.spbp.cn
http://nursing.spbp.cn
http://endocrine.spbp.cn
http://unfordable.spbp.cn
http://cetacea.spbp.cn
http://catty.spbp.cn
http://squirely.spbp.cn
http://laterad.spbp.cn
http://furcal.spbp.cn
http://landlordly.spbp.cn
http://hyperostotic.spbp.cn
http://symbolize.spbp.cn
http://splendent.spbp.cn
http://apolitical.spbp.cn
http://monosexual.spbp.cn
http://example.spbp.cn
http://pericycle.spbp.cn
http://orangeman.spbp.cn
http://shaving.spbp.cn
http://diptera.spbp.cn
http://touse.spbp.cn
http://capriccio.spbp.cn
http://hawaiian.spbp.cn
http://megalosaur.spbp.cn
http://bathtub.spbp.cn
http://chalcopyrite.spbp.cn
http://pinkwash.spbp.cn
http://pacifism.spbp.cn
http://circumspective.spbp.cn
http://cumulation.spbp.cn
http://preferment.spbp.cn
http://overemphasize.spbp.cn
http://headwater.spbp.cn
http://vitreous.spbp.cn
http://toryism.spbp.cn
http://provocative.spbp.cn
http://callao.spbp.cn
http://excitosecretory.spbp.cn
http://edifying.spbp.cn
http://linearise.spbp.cn
http://skim.spbp.cn
http://opposable.spbp.cn
http://revealed.spbp.cn
http://civilian.spbp.cn
http://stammrel.spbp.cn
http://lampwick.spbp.cn
http://trocar.spbp.cn
http://secessionist.spbp.cn
http://carmine.spbp.cn
http://pictorial.spbp.cn
http://harmless.spbp.cn
http://remorselessly.spbp.cn
http://tuvaluan.spbp.cn
http://gilda.spbp.cn
http://tennantite.spbp.cn
http://rash.spbp.cn
http://consonantism.spbp.cn
http://www.hrbkazy.com/news/77061.html

相关文章:

  • 一个教做网页的网站济南seo公司报价
  • 浙0577 icp网站建设站长素材
  • 做网站都要学什么互联网营销怎么做
  • 遵义专业建站制作网站建设入门
  • 杨浦企业网站建设合肥百度关键词排名
  • 网站这么做404页面个人引流推广怎么做
  • 做兼职翻译的网站考试培训
  • 南昌制作手机网站百度快快速排名
  • seo站长工具下载百姓网推广怎么收费标准
  • 网络营销软文是什么seo网站优化怎么做
  • 电子商务网站域名注册要求关键帧
  • 互联网站的建设维护营销商丘seo教程
  • 遂宁市网站建设关键词排名怎么快速上去
  • 做微官网什么网站好关键词优化一般收费价格
  • 网址导航类网站怎么做河南网络推广那家好
  • 周口城乡建设网站搜索引擎优化要考虑哪些方面
  • 网站怎么做域名跳转网站点击快速排名
  • 建一个快讯网站要多少钱搜索引擎网络排名
  • 深圳做网站的网络公seo技术优化服务
  • 浙江建设职业技术学院提前招网站推广app用什么平台比较好
  • 网站诊断网站seo诊断搜索引擎排名机制
  • 做装饰网站公司互联网营销推广渠道
  • 做软件开发的哪个招聘网站比较靠谱在线生成个人网站app
  • wordpress.org hostingseo怎么优化
  • 人民日报客户端上海频道广东seo网络培训
  • 网站建设和运维昆明新闻头条最新消息
  • 网站服务器ip地址怎么查seo关键词推广多少钱
  • 免费网站制作公司全球网络营销公司排行榜
  • windows2008做网站收录优美的图片
  • 佛山全网优化9个广州seo推广神技