我想减去两张图片.我的问题是cvSub() - 函数饱和.我想做的是:
1)将原始图像转换为灰度.
2)拍摄灰度图像(值为0-255).
3)减去图像(值从-255到255) - >使用cvSub()重新缩放的问题.
4)通过乘以0.5并添加128来重新缩放.
我想过将灰度图像从8位改为16位,但随后一切都变得更糟,它变成了许多代码行,最后它没有用完.
我想使用opencv BoundingRect在白色背景上获得填充黑色圆圈的边界框.我使用了http://cgi.cse.unsw.edu.au/~cs4411/wiki/index.php?title=OpenCV_Guide#Finding_bounding_boxes_around_regions_of_a_binary_image中的示例代码,但未能获取边界框的属性并将其绘制到图像中.我认为应该是一个简单的问题,但我仍然做不到...
如果你能写下一些示例代码,那就太好了.
谢谢.
我目前使用的图片是1392x1040像素的图像,中间有一个大黑圈(直径约1000像素),图像的其余部分是白色.
我的源代码是:
#include <iostream>
#include <vector>
#include <cv.h>
#include <highgui.h>
using namespace std;
int main(int argc, char** argv){
IplImage* img_in = cvLoadImage("Schwarzer_Kreis.png",1);
IplImage* img_working = cvCreateImage(cvGetSize(img_in), 8, 1);
cvCvtColor(img_in, img_working, CV_BGR2GRAY);
CvSeq* seq;
vector<CvRect> boxes;
CvMemStorage* storage = cvCreateMemStorage(0);
cvClearMemStorage(storage);
cvFindContours(img_working, storage, &seq, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cvPoint(600,200));
CvRect boundbox ;
for(; seq; seq = seq->h_next) {
boundbox = cvBoundingRect(seq);
boxes.push_back(boundbox);
}
for (int ii=0; ii<boxes.size(); ii++) {
cout << boxes[ii].x << endl;
cout << …Run Code Online (Sandbox Code Playgroud)