``` binary = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY) # 转换为二值图像,生成遮罩,抠图区域黑色遮盖 binaryInv = cv2.bitwise_not(binary) ```
时间: 2024-06-17 08:05:12 浏览: 285
这段代码使用OpenCV库实现了将灰度图像二值化的操作,并生成了一个遮罩。具体解释如下:
cv2.threshold()
函数用于将灰度图像二值化,即将像素值大于阈值的设为一个值(这里是255),小于阈值的设为另一个值(这里是0)。函数的参数分别为:要处理的灰度图像、设定的阈值、超过阈值时的新像素值、不超过阈值时的新像素值。函数返回值有两个,第一个是阈值,第二个是处理后的二值图像。cv2.bitwise_not()
函数用于对二进制数据进行按位取反操作,即把0变成1,1变成0。这里将上一步得到的二值图像进行了取反操作,生成了另一个二值图像。- 变量
binary
和binaryInv
分别表示原始的二值图像和取反后的二值图像。可以将其用作遮罩,将其中一个用于遮盖另一个,实现抠图等效果。
相关问题
img=cv2.threshold(image,90,255,cv2.THRESH_BINARY) #调整裁剪效果 阈值算法速度优于canny算法 # img = cv2.Canny(image,100,20) # cannyb = cv2.resize(b,None,fx=0.25,fy=0.25) # cv2.imshow('Canny', cannyb) # cv2.waitKey(0) binary_image=img[1] #二值图--具有三通道 # binary_image = img # binary_image=cv2.cvtColor(binary_image,cv2.COLOR_BGR2GRAY) # print(binary_image.shape) #改为单通道 x = binary_image.shape[1] print("宽度x=", x) y=binary_image.shape[0] print("高度y=",y) x_min = 0 y_min = 0 x_max = 0 y_max = 0 count = 0 for r in range(y): if 255 in binary_image[r][:]: if count == 0: y_min = r count += 1 y_max = r
以下是将该Python代码转换为C++代码的实现示例:
cv::Mat img;
cv::threshold(image, img, 90, 255, cv::THRESH_BINARY);
// cv::Canny(image, img, 100, 200);
// cv::resize(b, cannyb, cv::Size(), 0.25, 0.25);
// cv::imshow("Canny", cannyb);
// cv::waitKey(0);
cv::Mat binary_image = img;
// cv::cvtColor(binary_image, binary_image, cv::COLOR_BGR2GRAY);
// std::cout << binary_image.size() << std::endl;
int x = binary_image.cols;
std::cout << "宽度x=" << x << std::endl;
int y = binary_image.rows;
std::cout << "高度y=" << y << std::endl;
int x_min = 0, y_min = 0, x_max = 0, y_max = 0, count = 0;
for (int r = 0; r < y; r++) {
bool has_object = false;
for (int c = 0; c < binary_image.cols; c++) {
if (binary_image.at<uchar>(r, c) == 255) {
has_object = true;
break;
}
}
if (has_object) {
if (count == 0) {
y_min = r;
}
count++;
y_max = r;
}
}
需要注意的是,在C++中使用OpenCV库进行图像处理时,需要使用cv::Mat
类型来表示图像,并且需要使用at<uchar>(r, c)
方法来获取图像中指定位置的像素值。此外,在使用cv::threshold()
函数时,需要将输出结果赋值给一个新的cv::Mat
对象,而不能直接覆盖原始输入图像。
ret1, th1 = cv2.threshold(img, 50, 100, cv2.THRESH_BINARY)
这段代码使用 OpenCV 库中的 cv2.threshold()
函数对图像进行二值化处理,将图像中灰度值大于 50 的像素点设为 100,小于等于 50 的像素点设为 0,最终输出二值化后的图像和阈值。其中,img
是输入的图像,50
是二值化的阈值,100
是超过阈值的像素点设置的新值,cv2.THRESH_BINARY
是二值化的类型,表示将大于阈值的像素点设置为新值,小于等于阈值的像素点设置为 0。函数的返回值 ret1
是计算出的阈值,th1
是二值化后的图像。