0
A
回答
1
您可以尝试转换为HSV颜色空间和颜色阈值。但是,您可能无法将阈值作为变量移除,因为每个图像的光照都有轻微的变化。从经验中我可以告诉你,有时候你可以慷慨地扩展门槛,以适应大部分你想要的东西。但更通用的解决方案将需要更复杂的算法。
来自OpenCV的文档:
11 # Convert BGR to HSV
12 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
13
14 # define range of blue color in HSV
15 lower_blue = np.array([110,50,50])
16 upper_blue = np.array([130,255,255])
17
18 # Threshold the HSV image to get only blue colors
19 mask = cv2.inRange(hsv, lower_blue, upper_blue)
对于你那里,你将不得不调整过程中的参数暗黄。
1
使用霍夫圆变换来查找分隔眼睛和灰色区域的圆。
其基本思想是运行Hough circle transfor,然后找到圈子内部与外部之间值最大的圆圈。
代码:
import cv2
import numpy as np
# Read image
Irgb = cv2.imread('eye.jpg')
# Take the first channel (No specifc reason just good contrast between inside the eye and outside)
Igray = Irgb[:,:,0]
# Run median filter to reduce noise
IgrayFilter = cv2.medianBlur(Igray,101)
# Find circles using hough circles
minRadius = np.floor(np.min(Igray.shape)/2)
circles = cv2.HoughCircles(IgrayFilter, cv2.HOUGH_GRADIENT, dp=0.5,param1=100,param2=50,minRadius=int(minRadius),minDist=100)
circles = np.uint16(np.around(circles))
cimg = Irgb
# For each circle that we found find the intinestiy values inside the circle and outside.
# We eould take the circle that as the biggest difference between inside and outside
diff = []
for i in circles[0, :]:
# Create mask from circel identity
mask = np.zeros_like(Igray)
maskInverse = np.ones_like(Igray)
cv2.circle(mask, (i[0], i[1]), i[2], 1, cv2.FILLED)
cv2.circle(maskInverse, (i[0], i[1]), i[2], 0, cv2.FILLED)
# Find values inside mask and outside
insideMeanValues = np.mean(np.multiply(mask,Igray))
outsideMeanValues = np.mean(np.multiply(maskInverse, Igray))
# Save differnses
diff.append(abs(insideMeanValues-outsideMeanValues))
# Take the circle with the biggest difference in color as the border circle
circleID = np.argmax(diff)
circleInfo = circles[0, circleID]
# Create mask from final image
mask = np.zeros_like(Igray)
cv2.circle(mask, (i[0], i[1]), i[2], 1, cv2.FILLED)
# Show final image only in the mask
finalImage = Irgb
finalImage[:,:,0] = np.multiply(finalImage[:,:,0],mask)
finalImage[:,:,1] = np.multiply(finalImage[:,:,1],mask)
finalImage[:,:,2] = np.multiply(finalImage[:,:,2],mask)
cv2.imwrite('circle.jpg',finalImage)
相关问题
- 1. 如何减少图像中的噪音
- 2. php - imagemagick用黑色掩盖图像
- 3. opencv的 - 掩盖了黑色图像的图像效果
- 4. 图像噪音去除
- 5. 如何在IOS sdk中掩盖图像?
- 6. ImageMagick - 单色噪音
- 7. 灰色UIImage - 灰色IP图像转换
- 8. SVG图像掩盖了IE
- 9. 如何从彩色图像动画到灰色图像?
- 10. 如何获取图像中像素的颜色(加载灰色)?
- 11. 如何用KineticJS将另一个PNG图像掩盖PNG图像?
- 12. 如何显示灰色图像的颜色图?
- 13. :覆盖前没有掩盖图像时掩藏在
- 14. 什么是常用来消除噪音和平滑的灰度图像?
- 15. CSS:如何将彩色图像变成灰色或黑色/白色图像
- 16. 可可棕色噪音
- 17. 着色灰度图像as3
- 18. '灰色'WPF按钮图像?
- 19. 着色灰度图像
- 20. CSS - 着色灰度图像
- 21. 如何识别图像中存在的噪音类型
- 22. 如何添加和删除图像中的噪音
- 23. 如何使用OpenCV从图像中去除特定的噪音
- 24. 如何掩盖matlab中的图像的一部分?
- 25. openCV显示图像灰色如果getchar
- 26. 如何掩盖UIView
- 27. 用CSS/border-radius掩盖图像
- 28. 通过图像掩盖创建粒子
- 29. 使用路径掩盖图像
- 30. 在Swift 2.0中掩盖图像
这是不是一个一般的用例? – meetaig