Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何去除图像中正方形的突出部分?_C++_Opencv - Fatal编程技术网

C++ 如何去除图像中正方形的突出部分?

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

]

我想从上图中得到一个正方形。但当我试图得到它时,它还包括其他突出部分,因为它们有相似的颜色。是否有任何解决方案可以获得如下结果?(方形线不是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(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抱歉,我忘了。我上传了图片,非常感谢。但是,如果存在不同的环境,例如不同的灯光,是否有任何自适应方法来更改阈值的参数?如果没有其他示例图像,很难判断。例如,如果您的矩形变得与背景一样明亮,那么阈值设置通常可能会失败。也许,与使用阈值相比,其他方法(如边缘检测)也会有所帮助。然而,这里的重点是正确提取遮罩图像中的矩形。如果你在正确提取原始图像中的矩形方面有困难,请回答另一个问题,因为那是完全不同的。我理解。我会想办法解决这个问题。非常感谢。