gpt4 book ai didi

java - 使用javacv中的匹配模板查找图像中特定区域的图像

转载 作者:行者123 更新时间:2023-12-01 13:35:40 24 4
gpt4 key购买 nike

我正在尝试在另一个特定区域中查找图像的位置。我正在使用 javacv 来解决这个问题。但是我的代码在执行 cvMatchTemplate 函数时出错。我想我很怀念使用cvSetImageROI

这就是我的使用方式:

    public static void main(String c[]) {

IplImage src = cvLoadImage("test.jpg", 0);
IplImage tmp = cvLoadImage("tmp.png", 0);
IplImage result = cvCreateImage(cvSize(src.width() - tmp.width() + 1, src.height() - tmp.height() + 1),
IPL_DEPTH_32F,1);
cvZero(result);

cvSetImageROI(src, new CvRect(22, 50, 30, 30));
cvSetImageROI(result, new CvRect(22, 50, 30, 30));

//Match Template Function from OpenCV
cvMatchTemplate(src, tmp, result, CV_TM_CCORR_NORMED);

double[] min_val = new double[2];
double[] max_val = new double[2];
CvPoint minLoc = new CvPoint();
CvPoint maxLoc = new CvPoint();

cvMinMaxLoc(result, min_val, max_val, minLoc, maxLoc,
null);
CvPoint point = new CvPoint();
point.x(maxLoc.x() + tmp.width());
point.y(maxLoc.y() + tmp.height());
cvRectangle(src, maxLoc, point, CvScalar.RED, 2, 8, 0);
cvShowImage("Lena Image", src);
cvWaitKey(0);
cvReleaseImage(src);
cvReleaseImage(tmp);
cvReleaseImage(result);
}

这是错误:

    OpenCV Error: Assertion failed (result.size() == cv::Size(std::abs(img.cols - templ.cols) 
+ 1,std::abs(img.rows - templ.rows) + 1) && result.type() == CV_32F) in unknown function,
file ..\..\..\src\opencv\modules\imgproc\src\templmatch.cpp, line 384

有什么帮助吗?

最佳答案

嘿,看看我用 Javacv 做的这个例子

public class Test {
static Image image;

public static void main(String[] args) throws Exception {
int width = Integer.parseInt(args[3]);
int height = Integer.parseInt(args[4]);

IplImage src = cvLoadImage(
args[0], 0);
IplImage tmp = cvLoadImage(
args[1], 0);

IplImage result = cvCreateImage(
cvSize(src.width() - tmp.width() + 1,
src.height() - tmp.height() + 1), IPL_DEPTH_32F, src.nChannels());

cvZero(result);

// Match Template Function from OpenCV
cvMatchTemplate(src, tmp, result, CV_TM_CCORR_NORMED);

// double[] min_val = new double[2];
// double[] max_val = new double[2];
DoublePointer min_val = new DoublePointer();
DoublePointer max_val = new DoublePointer();

CvPoint minLoc = new CvPoint();
CvPoint maxLoc = new CvPoint();

cvMinMaxLoc(result, min_val, max_val, minLoc, maxLoc, null);

// Get the Max or Min Correlation Value
// System.out.println(Arrays.toString(min_val));
// System.out.println(Arrays.toString(max_val));

CvPoint point = new CvPoint();
point.x(maxLoc.x() + tmp.width());
point.y(maxLoc.y() + tmp.height());
// cvMinMaxLoc(src, min_val, max_val,0,0,result);

cvRectangle(src, maxLoc, point, CvScalar.RED, 2, 8, 0);// Draw a
// Rectangle for
// Matched
// Region
CvRect rect = new CvRect();
rect.x(maxLoc.x());
rect.y(maxLoc.y());
rect.width(tmp.width() + width);
rect.height(tmp.width() + height);
cvSetImageROI(src, rect);
IplImage imageNew = cvCreateImage(cvGetSize(src), src.depth(),
src.nChannels());
cvCopy(src, imageNew);
cvSaveImage(args[2], imageNew);

cvShowImage("Lena Image", src);
cvWaitKey(0);
cvReleaseImage(src);
cvReleaseImage(tmp);
cvReleaseImage(result);

}

完整引用here我们需要 4 个这样的默认参数“C:\Users\Waldema\Desktop\bg.jpg” “C:\Users\Waldema\Desktop\logosiemens.jpg” “C:\Users\Waldema\Desktop\imageToFind.jpg” 100 200

可在常见IDE的运行配置中进行配置。我认为这会有所帮助

关于java - 使用javacv中的匹配模板查找图像中特定区域的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292991/

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