我想找到显示器中存在的每一个坏像素。坏像素可以是颜色不正确的像素,或者像素只是黑色。显示器的尺寸为160x320像素。因此,如果显示器是好的,必须有160*320 = 51200像素。如果显示器没有51200像素,那么就是坏的。此外,我想知道每个坏像素的位置。
一旦拍摄的图像太大,我会分享一个谷歌驱动器共享文件夹,里面有好的显示器和包含坏像素的坏显示器的例子。
Displays Images
你能告诉我怎么做吗?我想用python和opencv来做。
提前感恩
我试过通过检测到的物体的轮廓进行评估,它的工作原理,但只有当所有像素都存在。如果一个像素丢失,没有检测到轮廓,我可以知道一个像素丢失,但我不能知道它的位置。
所以我认为最好的解决方案是跟踪网格并评估网格的每个单元。
下面是我目前的代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
def getColor(area):
if area > 70:
return (255, 0, 0)
if area < 14:
return (0, 0, 255)
return (255, 255, 0)
def test_green_pattern():
mask = cv2.imread("masks/mask.bmp", 0)
green = cv2.imread("images/green-good.bmp")
green_W = cv2.addWeighted(green, 3, green, 0, 1)
gray = cv2.cvtColor(green_W, cv2.COLOR_BGR2GRAY)
masked = cv2.bitwise_and(gray, gray, mask=mask)
cv2.imwrite("try/green-masked.bmp", masked)
# Real threshold = 120
ret, thresh = cv2.threshold(masked, 120, 255, cv2.THRESH_BINARY)
cv2.imwrite("try/green-threshold.bmp", thresh)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
print("Green Pattern Pixels:", len(contours))
areas = []
perimeters = []
bad = 0
prob_double = 0
qtd = 0
for i, contour in enumerate(contours):
area = area = cv2.contourArea(contour)
areas.append(area)
perimeter = cv2.arcLength(contour,True)
perimeters.append(perimeter)
color = getColor(area)
if area < 14:
bad += 1
qtd += 1
x, y, width, height = cv2.boundingRect(contour)
roi = green[y:y+height, x:x+width]
cv2.imwrite("try/temp/"+str(i)+".bmp", roi)
cv2.drawContours(green, contour, -1, color, 1)
cv2.drawContours(green_W, contour, -1, color, 1)
if area > 90:
prob_double += 1
qtd += 2
cv2.drawContours(green, contour, -1, color, 1)
cv2.drawContours(green_W, contour, -1, color, 1)
else:
qtd += 1
#get_statistics(areas, perimeters)
print("Total:",qtd)
print("Probably double pixel:", prob_double)
print("Bad pixels:", bad)
cv2.imwrite("try/green-contours.bmp", green)
cv2.imwrite("try/green_w-contours.bmp", green_W)
test_green_pattern()
1条答案
按热度按时间zkure5ic1#
1.求轮廓质心
2.在同一列中查找质心点
3.插入点.
坏像素
连接
好/坏像素
蓝/红线
输入:green-bad.bmp
输出:c,r= 211,30 c,r= 211,30
输入:green-good.bmp
输出:无