1. Interact with the image to obtain the coordinates and pixel values of the image
import cv2
import numpy as np
import signal
import threading
import time
if __name__ == '__main__':
img = cv2.imread('XXX',0)#读取图片
font_face,font_scale,thickness=cv2.FONT_HERSHEY_SIMPLEX,0.5,1
#鼠标交互
def mouseHandler(event,x,y,flags,param):
points = (x,y)
global imgCopy
#鼠标左键双击事件
if event == cv2.EVENT_LBUTTONDBLCLK:
#拷贝一张与原图像格式相同的新图像
imgCopy = img.copy()
#拼接文字
text = '['+str(x)+','+str(y)+']'+str(img[y,x])
print(text)
#读取文字(宽,高),下基线
(t_w,t_h),baseLine = cv2.getTextSize(text,font_face,font_scale,thickness)
#在鼠标当前位置的左上角显示文字
cv2.putText(imgCopy,text,(x-t_w,y),font_face,font_scale,(125,125,125))
cv2.imshow('win',imgCopy)
#鼠标移动事件
elif event == cv2.EVENT_MOUSEMOVE:
#显示原图片能使文本框消失
cv2.imshow('win',img)
cv2.namedWindow('win')
#窗口与回调函数绑定
cv2.setMouseCallback('win',mouseHandler)
cv2.imshow('win',img)
cv2.waitKey()
2. Binarized image
import cv2
import numpy as np
import signal
import threading
import time
if __name__ == '__main__':
img = cv2.imread('path',0)#读取图片
ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
print("threshold value %s" % ret) #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色
cv2.imshow("threshold", binary) #显示二值化图像
cv2.waitKey(0)
cv2.destroyAllWindows()
Batch image binarization
import cv2
import numpy as np
import signal
import threading
import time
import os
import sys
import random
import datetime
import argparse
def get_files(path):
files = []
for filename in os.listdir(path):
if os.path.isfile(os.path.join(path, filename)):
files.append(filename)
return files
if __name__ == '__main__':
files_path="XXX"
#print(files_path)
image_files = get_files(files_path)
i=1
#print(image_files)
for image_file in image_files:
image_path=os.path.join(files_path , image_file)
print(image_path)
img = cv2.imread(image_path,0)#读取图片
start_time_init = time.perf_counter()
ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
end_time_init = time.perf_counter()
elapsed_time_init = (end_time_init - start_time_init)*1000
print("二值化时间: {} ms".format(elapsed_time_init))
print("threshold value %s" % ret) #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色s
cv2.imwrite(files_path+"/binary/"+str(i)+".png",binary)
i=i+1
3. Region merging to extract the largest connected domain
import cv2
import numpy as np
import signal
import threading
import time
import os
import sys
import random
import datetime
import argparse
def get_files(path):
files = []
for filename in os.listdir(path):
if os.path.isfile(os.path.join(path, filename)):
files.append(filename)
return files
if __name__ == '__main__':
#files_path="/home/robot/PaddleOCR-2.6.0/data/OK0828/raw_data/"
files_path="/home/robot/PaddleOCR-2.6.0/data/829/"
files_path="/home/robot/PaddleOCR-2.6.0/data/NG0823/"
#print(files_path)
image_files = get_files(files_path)
i=1
#print(image_files)
for image_file in image_files:
image_path=os.path.join(files_path , image_file)
print(image_path)
img = cv2.imread(image_path,0)#读取图片
start_time_init = time.perf_counter()
ret, binary = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
end_time_init = time.perf_counter()
elapsed_time_init = (end_time_init - start_time_init)*1000
print("二值化时间: {} ms".format(elapsed_time_init))
print("threshold value %s" % ret) #打印阈值,超过阈值显示为白色,低于该阈值显示为黑色s
cv2.imwrite(files_path+"/binary/"+str(i)+".png",binary)
i=i+1
# cv2.imshow("threshold", binary) #显示二值化图像
# cv2.waitKey(0)
# cv2.destroyAllWindows()
start_time = time.perf_counter()
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary)
end_time = time.perf_counter()
elapsed_time = (end_time - start_time)*1000
print("连通域的时间: {} ms".format(elapsed_time))
max_area=0
j=0
for st in stats[1:]:
j=j+1
area=st[4]
if(max_area<area):
max_area=area
index=j
print("index",index)
print("max_area",max_area)
#index=index+1
print('num_labels: ', num_labels)
labels[labels>0] = 255
labels = labels.astype(np.uint8)
# #将一维灰度图像扩展到三维
labels= np.expand_dims(labels,axis=2).repeat(3,axis=2).astype(np.uint8)
# for st in stats[1:]:
cv2.rectangle(labels, (stats[index][0], stats[index][1]), (stats[index][0]+stats[index][2], stats[index][1]+stats[index][3]), (0, 255, 0), 3)
#cv2.imshow('labels', labels)
#cv2.waitKey(0)
cv2.imwrite(files_path+"/labels/"+str(i)+".png",labels)