//二值化 threshold(dst, gray, 120, 255, THRESH_BINARY); imshow("gray", gray);
时间: 2023-07-16 14:11:58 浏览: 88
这段代码使用了 OpenCV 中的 threshold 函数,将灰度图像二值化。其中,gray 是输入的灰度图像,dst 是输出的二值化图像。120 是阈值,大于等于 120 的像素值被置为 255 (白色),小于 120 的像素值被置为 0 (黑色)。最后用 imshow 函数显示出灰度图像和二值化图像。
相关问题
import cv2 import numpy as np img = cv2.imread('D:/xiazai/yxtxcl4/BloodCell.jpg', -1) cv2.imshow("source", img) dst = cv2.blur(img, (3, 3)) ret, thresh = cv2.threshold(dst, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) cv2.imshow("thresh", thresh) kernel = np.ones((4, 4), np.uint8) opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=2) kernel1 = np.ones((3, 3), np.uint8) close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel1) cv2.imshow("opening", close) temp = close.copy() h, w = close.shape[:2] mask = np.zeros((h+2, w+2), np.uint8) cv2.floodFill(temp, mask, (230, 145), 255) temp_inv = cv2.bitwise_not(temp) result = close | temp_invcv2.imshow("result", result) contours, hierarchy = cv2.findContours(result, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) count = 0 area = 0 for i in contours: if cv2.contourArea(i) > 73: area += cv2.contourArea(i) count += 1 count1 = 0 for i in contours: if cv2.contourArea(i) > 73: count1 += 1 if cv2.contourArea(i) > (1.25 * area / count): count1 += 1 if cv2.contourArea(i) > (2.1 * area / count): count1 += 1 print("细胞有%d个" % count1) cv2.waitKey(0)
这段代码主要是对一张血细胞图像进行图像分割和细胞计数。具体而言,代码首先读入一张图像并进行均值滤波,然后通过大津算法求取一个阈值,将图像二值化。接下来,采用形态学开操作和闭操作对二值化后的图像进行处理,去除噪声和连接细胞。接着,使用漫水填充算法找到每个细胞的边界,并计算细胞数量。最后,将细胞数量输出。
需要注意的是,这段代码可能会在不同的OpenCV版本上产生不同的结果,因为不同版本的函数参数可能存在差异。如果你需要在自己的项目中使用这段代码,请确保你使用的OpenCV版本与作者使用的版本一致,或者根据提示进行相应的修改。
import cv2 import numpy as np img=cv2.imread("E:/beans.jpg",0) # 将图片进行灰度处理 imgs=cv2.resize(img,None,fx=1/6,fy=1/6) # 调整图片大小 t1,dst=cv2.threshold(imgs,100,255,cv2.THRESH_BINARY_INV) # 将图片进行反二值化处理 k=np.ones((5,5),np.uint8) # 设定内核为5 img2=cv2.dilate(dst,k) # 将图片进行腐蚀、膨胀处理 img1=cv2.erode(img2,k) img3=cv2.erode(img1,k) img4=cv2.dilate(img3,k) cv2.imshow('image', img4) cv2.imwrite("E:/bin_beans.jpg",img4) # 保存图像 cv2.waitKey(0) cv2.destroyAllWindows() # 查找轮廓 contours, hierarchy = cv2.findContours(img4, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 遍历轮廓并绘制 for contour in contours: cv2.drawContours(img4, [contour], 0, (0, 255, 0), 2) # 显示图像 cv2.imshow('image', img4) cv2.waitKey(0) cv2.destroyAllWindows() # 输出轮廓数量(也就是豆子的颗粒数) print(len(contours))
这是 Python 代码,它导入了两个模块 cv2 和 numpy,并从本地磁盘中读取一张图片 "E:/beans.jpg",将其转换为灰度图并赋值给变量 img。
cv2 是一个用于图像处理和计算机视觉的库,numpy 是一个用于科学计算的库。这两个库都是 Python 中常用的工具库。
imread() 是 cv2 库中的一个函数,用于从本地磁盘中读取图像。第一个参数是图像文件的路径,第二个参数是可选的,表示读取图像的模式,0 表示灰度图,1 表示彩色图。
阅读全文