当前位置: 首页 > 知识库问答 >
问题:

CPP OpenCV-尝试根据图像边缘裁剪图像

陆星文
2023-03-14

我需要裁剪图像根据边缘我发现(与给定epsilon)

我有以下说明:Opencv c检测并裁剪图像上的白色区域

有了一个变化-我试图根据我从精明的边缘检测器收到的边缘图像找到矩形:

cv::Mat in = cv::imread("c:/cropping/myImage.png");
cv::Mat _imgGray;
cv::Mat edges;
std::vector<cv::Point> nonBlackList;

cv::cvtColor(in, _imgGray, CV_BGR2GRAY);
cv::Canny(_imgGray, edges, 5, 50, 3);
for(int j=0; j<edges.rows; ++j)
for(int i=0; i<edges.cols; ++i)
{
    // if not black: add to the list
    if(edges.at<cv::Vec3b>(j,i) != cv::Vec3b(0,0,0))
    {
        nonBlackList.push_back(cv::Point(i,j));
    }
}

我遇到的问题是,当我到达第139列时,它会因为以下异常而崩溃:

Microsoft C异常:cv::内存位置0x000000EB35DEF170处的异常。

但是,当我使用原始图像(而不是边缘图像)时,它会按预期工作。

有什么想法吗?我想要的是根据图像的边缘而不是实际图像进行裁剪

谢谢

共有1个答案

慕容玉堂
2023-03-14

Canny的结果是8位单通道二值图像。您正在使用Vec3i访问像素值;这意味着您假设图像是8位3通道图像,这是不正确的。尝试:

if(edges.at<uchar>(j,i) != 0)
{
    nonBlackList.push_back(cv::Point(i,j));
}
 类似资料:
  • 我不熟悉Python中的图像处理,我正在尝试解决一个常见问题。我有一张有人签名的照片。我想找到边缘并裁剪它以适合图像中的签名。 我尝试了Canny边缘检测和使用现有解决方案列表裁剪图像 我尝试了一些解决方案: > https://www.quora.com/How-can-I-detect-an-object-from-static-image-and-crop-it-from-the-image

  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 我将<code>背景 1.back_xml: 2.瓷砖.xml 现在,我将back.xml设置为< code >背景以< code>LinearLayout工作正常。 我需要有一个圆角,以及它的边框。但是我只有圆角的边框,而不是图像,我的代码中有什么问题吗? 这是我的照片:

  • 本节,我们将裁剪图像的一部分,然后把其结果绘制到画布上。 图3-2 裁剪图像 绘制步骤 按照以下步骤,裁剪图像的一部分,再把结果绘制到画布: 1. 定义画布上下文: window.onload  = function(){ var canvas  = document.getElementById("myCanvas"); var context  = canvas.getContext

  • 问题内容: 下面的代码可以很好地裁剪图像,这是我想要的,但是对于较大的图像,它也可以正常工作。有什么办法可以缩小图像吗? 想法是,在裁剪之前,我将能够使每个图像的大小大致相同,以便每次都能获得良好的效果 代码是 问题答案: 如果要生成缩略图,则必须首先使用调整图像大小。您必须调整图像的大小,以使图像较小侧的尺寸等于拇指的相应侧。 例如,如果源图像为1280x800px,拇指为200x150px,则

  • 出于某种原因,当我使用WordPress 3.6.1媒体库GUI功能裁剪缩略图时,它似乎不会影响公文包页面上显示的缩略图?即使缩略图在后端显示为裁剪,但在公文包页面上仍然显示不正确? 下面是公文包页面的代码摘录。正如您所看到的,它使用中等大小的缩略图。 functions.php我有以下几点: 为什么我不能通过WordPress GUI将上传到媒体库的肖像图像裁剪成横向格式?