C++ 如何去除图像中正方形的突出部分?
] 我想从上图中得到一个正方形。但当我试图得到它时,它还包括其他突出部分,因为它们有相似的颜色。是否有任何解决方案可以获得如下结果?(方形线不是100%笔直。它们有点扭曲。) 这是我写的代码C++ 如何去除图像中正方形的突出部分?,c++,opencv,C++,Opencv,] 我想从上图中得到一个正方形。但当我试图得到它时,它还包括其他突出部分,因为它们有相似的颜色。是否有任何解决方案可以获得如下结果?(方形线不是100%笔直。它们有点扭曲。) 这是我写的代码 cv::Mat img\u gray、img、clahe\u img、threshold\u img、bitwise\u img、morph\u img; cv::Mat校正\U CCD\U img=cv::imread('img.png')) cv::Mat kernel=cv::Mat::ones(9
cv::Mat img\u gray、img、clahe\u img、threshold\u img、bitwise\u img、morph\u img;
cv::Mat校正\U CCD\U img=cv::imread('img.png'))
cv::Mat kernel=cv::Mat::ones(99,99,cv_8U);
clahe=cv::createCLAHE(10,cv::Size(100100));
cv::CVT颜色(校正后的CCD、img、灰色、cv::颜色、BGR2灰色);
cv::medianBlur(img_gray,img,33);
索赔->申请(img,索赔);
cv::threshold(clahe_img,threshold_img,0,255,cv::THRESH_OTSU);
cv::按位\u非(阈值\u img,按位\u img);
cv::morphologyEx(按位\u img、变形\u img、cv::变形\u OPEN、内核);
这是原始图像:
对于此特定图像,我的管道将非常简单:
//读取图像
cv::Mat img=cv::imread(“OTH61.png”,cv::imread_灰度);
//固定阈值下的二值阈值图像
cv::Mat img_thr;
cv::threshold(img,img_thr,32255,cv::THRESH_BINARY_INV);
//大矩形核形态开口
cv::Mat img_mop;
cv::morphologyEx(img_-thr,img_-mop,cv::MORPH_-OPEN,cv::Mat::ones(51,51,cv_8UC1));
//将矩形w.r.t.绘制到剩余零件的边界矩形
cv::矩形(img_mop,cv::boundingRect(img_mop),255,cv::FILLED);
阈值图像:
打开的图像:
清理后的图像:
请提供输入图像。@eldesgraciado抱歉,我忘了。我上传了图片,非常感谢。但是,如果存在不同的环境,例如不同的灯光,是否有任何自适应方法来更改阈值的参数?如果没有其他示例图像,很难判断。例如,如果您的矩形变得与背景一样明亮,那么阈值设置通常可能会失败。也许,与使用阈值相比,其他方法(如边缘检测)也会有所帮助。然而,这里的重点是正确提取遮罩图像中的矩形。如果你在正确提取原始图像中的矩形方面有困难,请回答另一个问题,因为那是完全不同的。我理解。我会想办法解决这个问题。非常感谢。