cv2.threshold(gray_img, 120, 255, cv2.THRESH_BINARY_INV)
时间: 2024-05-20 19:03:58 浏览: 19
这行代码使用了OpenCV库中的threshold函数,对灰度图像gray_img进行二值化处理,将灰度值大于等于120的像素点设为255(白色),灰度值小于120的像素点设为0(黑色),并使用cv2.THRESH_BINARY_INV选项将结果进行反转,即黑白颜色反转。该函数的返回值为二值化后的图像。
相关问题
讲解这段代码:def read_img_and_convert_to_binary(filename): #读取待处理的图片 original_img = cv2.imread(filename) # print(original_img) #将原图分辨率缩小SCALSIZE倍,减少计算复杂度 original_img = cv2.resize(original_img,(np.int(original_img.shape[1]/SCALSIZE),np.int(original_img.shape[0]/SCALSIZE)), interpolation=cv2.INTER_AREA) #降噪 blur = cv2.GaussianBlur(original_img, (5, 5), 0) #将彩色图转化成灰度图 img_gray = cv2.cvtColor(blur,cv2.COLOR_BGR2GRAY) #图片开(opening)处理,用来降噪,使图片中的字符边界更圆滑,没有皱褶 kernel = np.ones((3, 3), np.uint8) opening = cv2.morphologyEx(img_gray, cv2.MORPH_OPEN, kernel) kernel2 = np.ones((3,3), np.uint8) opening = cv2.dilate(opening, kernel2, iterations=1) # Otsu's thresholding after Gaussian filtering # 采用otsu阈值法将灰度图转化成只有0和1的二值图 blur = cv2.GaussianBlur(opening,(13,13),0) #ret, binary_img = cv2.threshold(img_gray, 120, 1, cv2.THRESH_BINARY_INV) ret,binary_img = cv2.threshold(blur,0,1,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) return original_img,binary_img
这段代码是一个函数,名为`read_img_and_convert_to_binary`,它的功能是读取一张待处理的图片并将其转换为二值图像。下面是对代码的逐行解释:
1. `original_img = cv2.imread(filename)`:使用OpenCV库的`imread`函数读取指定路径的图片,并将其存储在`original_img`变量中。
2. `original_img = cv2.resize(original_img,(np.int(original_img.shape[1]/SCALSIZE),np.int(original_img.shape[0]/SCALSIZE)), interpolation=cv2.INTER_AREA)`:将原图的分辨率缩小`SCALSIZE`倍,通过调整图像大小减少计算复杂度,结果存储在`original_img`变量中。
3. `blur = cv2.GaussianBlur(original_img, (5, 5), 0)`:使用高斯模糊对`original_img`进行降噪处理,减少图像中的噪点,结果存储在`blur`变量中。
4. `img_gray = cv2.cvtColor(blur,cv2.COLOR_BGR2GRAY)`:将降噪后的彩色图像转换为灰度图像,便于后续处理,结果存储在`img_gray`变量中。
5. `kernel = np.ones((3, 3), np.uint8)`:创建一个3x3的矩阵,用于后续图像形态学操作。
6. `opening = cv2.morphologyEx(img_gray, cv2.MORPH_OPEN, kernel)`:对灰度图像进行形态学开运算(opening),通过腐蚀和膨胀操作使字符边界更加平滑,结果存储在`opening`变量中。
7. `kernel2 = np.ones((3,3), np.uint8)`:创建另一个3x3的矩阵,用于后续膨胀操作。
8. `opening = cv2.dilate(opening, kernel2, iterations=1)`:对开运算后的图像进行膨胀操作,进一步平滑字符边界,结果仍存储在`opening`变量中。
9. `blur = cv2.GaussianBlur(opening,(13,13),0)`:再次使用高斯模糊对图像进行降噪处理,参数(13,13)表示高斯核的大小。
10. `ret, binary_img = cv2.threshold(blur,0,1,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)`:使用Otsu阈值法将灰度图像转换为二值图像。该阈值法会自动选择一个合适的阈值,将图像分为黑白两部分,结果存储在`binary_img`变量中。
11. 最后,函数返回原始图像`original_img`和二值图像`binary_img`。
这段代码主要进行了图像预处理的步骤,包括降噪、灰度化、形态学操作和阈值处理,最终得到二值图像以供后续处理使用。
import cv2 import numpy as np #Load two images img1 = cv2.imread('sources/1.jpg') img2 = cv2.imread('sources/3.jpg') #I want to put logo on top-left corner, So I create a ROI rows, cols, channels = img2.shape roi = img1[0:rows, 0:cols] #Now create a mask of logo and create its inverse mask img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY) # add a threshold ret,mask = cv2.threshold(img2gray, 220, 255, cv2.THRESH_BINARY_INV) mask_inv = cv2.bitwise_not(mask) # Now black-out the area of logo in ROI img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv) # Take only region of logo from logo image. img2_fg = cv2.bitwise_and(img2, img2, mask=mask) dst = cv2.add(img1_bg,img2_fg) img1[0:rows, 0:cols] = dst cv2.imshow('res',img1) cv2.waitKey(0) cv2.destroyAllWindows()
这段代码是一个图像融合的示例,将一个图像(img2)上的一部分区域(logo)融合到另一个图像(img1)上。代码的具体步骤如下:
1. 通过cv2.imread函数加载两个图像,分别为img1和img2。
2. 创建一个感兴趣区域(ROI),即img1中要融合logo的位置。
3. 将img2转换为灰度图像,使用cv2.cvtColor函数将其从BGR格式转换为灰度格式,保存在img2gray中。
4. 对img2gray进行阈值处理,通过cv2.threshold函数将灰度图像二值化为掩膜mask。阈值设定为220,即灰度值大于220的像素设为255(白色),小于等于220的像素设为0(黑色)。通过cv2.THRESH_BINARY_INV参数进行反转,使得logo部分为黑色,背景为白色。
5. 对mask进行按位取反操作,得到mask_inv,即将logo部分设为白色,背景部分设为黑色。
6. 对ROI中的图像img1_bg进行按位与操作,使用cv2.bitwise_and函数将ROI与mask_inv进行按位与运算,得到img1_bg,即将ROI中的logo部分变为黑色。
7. 对img2中的图像进行按位与操作,使用cv2.bitwise_and函数将img2与mask进行按位与运算,得到img2_fg,即将img2中的非logo部分变为黑色。
8. 将img1_bg和img2_fg进行图像相加,使用cv2.add函数将两个图像进行相加,得到dst,即融合后的图像。
9. 将dst复制到img1的ROI区域,即将融合后的图像放回原图。
10. 使用cv2.imshow显示结果图像,cv2.waitKey等待按键,cv2.destroyAllWindows关闭窗口。
这段代码实现了将img2中的logo部分融合到img1中的指定位置,最终展示了融合后的结果图像。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)