gpt4 book ai didi

c++ - OpenCV 处理 - 边缘检测和裁剪

转载 作者:行者123 更新时间:2023-12-03 02:14:38 29 4
gpt4 key购买 nike

如何从预处理图像中删除不规则的白色像素。

我尝试过进行侵 eclipse ,这会使所有像素变黑。

预处理后:

enter image description here

要求:

enter image description here

我的代码:

Mat  img, edges, erode, blurred, element;
element = getStructuringElement(cv::MORPH_RECT, cv::Size(7, 7), cv::Point(-1,-1) );

img = imread("img1925.jpeg"); // read the image
cv::Canny(img, edges, 30, 255, 3); // detect the edges with threshold limit

// cv::erode(edges, erode, element);

GaussianBlur(edges, blurred, cv::Size(7, 7), 0); // blurring

// Rect ROI = boundingRect(blurred); // draw rect for ROI
// Mat src = thresh(ROI);

namedWindow("image", WINDOW_NORMAL);
imshow("image", blurred);
waitKey(0);
return 0;

寻求建议!

最佳答案

我不确定从预处理图像中删除不规则的白色像素是什么意思,但如果您的目标是提取对象的投资返回率,那么这里有一个方法:

  • 将图像转换为灰度并将高斯模糊转换为平滑图像
  • 自适应阈值获取二值图像
  • 查找轮廓并使用轮廓区域进行过滤
  • 提取图像中最大的轮廓并裁剪 ROI
<小时/>

这是结果

enter image description here

如果您在阈值图像上裁剪 ROI,结果如下

enter image description here

我用 Python 实现了它,但您可以在 C++ 中遵循相同的步骤

import cv2

image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (7,7), 0)
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,11,3)

cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
ROI = image[y:y+h, x:x+w]
break

cv2.imwrite('ROI.png', ROI)
cv2.waitKey()

关于c++ - OpenCV 处理 - 边缘检测和裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59028984/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com