这是图片
import cv2
import matplotlib.pyplot as plt
image = cv2.imread("work/shrimps.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #灰度化
ret,thresh = cv2.threshold(gray, 0, 255,
cv.THRESH_OTSU) #大津算法 二值化
retval, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh, connectivity=8)
#retval : 返回值是连通区域的数量。
#labels : labels是一个与image一样大小的矩形(labels.shape = image.shape),其中每一个连通区域会有一个唯一标识,标识从0开始。
#stats :stats会包含5个参数分别为x,y,h,w,s。分别对应每一个连通区域的外接矩形的起始坐标x,y;外接矩形的wide,height;s其实不是外接矩形的面积,实践证明是labels对应的连通区域的像素个数。
#centroids : 返回的是连通区域的质心。
print(thresh)
print(retval)
print(labels)
print(stats)
下面是输出
[[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
...
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]]
2
[[1 1 1 ... 1 1 1]
[1 1 1 ... 1 1 1]
[1 1 1 ... 1 1 1]
...
[1 1 1 ... 1 1 1]
[1 1 1 ... 1 1 1]
[1 1 1 ... 1 1 1]]
[[ 0 0 1021 720 10092]
[ 0 0 1024 720 727188]]
想问一下这是什么问题,为什么二级化后像素值全成了255
使用如下语句,显示数组全部数据后你就可以看到,并不全是255,
import numpy as np
np.set_printoptions(threshold=np.inf)
使用print(np.count_nonzero(thresh==0))得出值为0 的个数为1417个(黑色像素值)
如对你有帮助,请点击我回答右上方采纳按钮采纳支持一下。
threshold的参数不对
opencv图像显示用print显然不直观,用imshow显示一下。可视化看是黑的白的。
cv2.namedWindow("thresh",0)
cv2.imshow("thresh", thresh)
cv2.waitKey(20)