0
#include "iostream"
#include "cv.h"
#include "highgui.h"
#include "cvaux.h"
#include "cxmisc.h"
#include "math.h"
using namespace cv;
using namespace std;
int main(){
int height, width, x, y, i, minX, minY, maxX, maxY;
char imgFileName[100];
IplImage *origImage = cvLoadImage("BaybayinMark/b9.jpg", -1);
height = origImage->height;
width = origImage->width;
IplImage *grayImage = cvCreateImage(cvSize(width, height), 8, 1);
IplImage *binImage = cvCreateImage(cvSize(width, height), 8, 1);
//Pre-processing phase
cvCvtColor(origImage, grayImage, CV_BGR2GRAY);
cvDilate(grayImage, grayImage, NULL, 1);
cvSmooth(grayImage, grayImage, CV_GAUSSIAN, 21, 21, 0, 0);
cvThreshold(grayImage, binImage, 120, 255, CV_THRESH_BINARY);
cvNormalize(binImage,binImage,0,1,CV_MINMAX);
minX = width;
minY = height;
maxX = 0;
maxY = 0;
CvScalar s;
for (x=0; x<width-1; x++){
for(y=0; y<height-1; y++){
s = cvGet2D(binImage, y, x);
//printf("%f\n", s.val[0]);
if (s.val[0] == 1){
//printf("HELLO");
minX = min(minX, x);
minY = min(minY, y);
maxX = max(maxX, x);
maxY = max(maxY, y);
}
}
}
cvSetImageROI(binImage, cvRect(minX, minY, maxX-minX, maxY-minY));
IplImage *cropImage = cvCreateImage(cvGetSize(binImage), 8, 1);
cvCopy(binImage, cropImage, NULL);
cvSaveImage("crop/cropImage9.jpg", cropImage);
cvResetImageROI(binImage);
cvReleaseImage(&origImage);
cvReleaseImage(&binImage);
cvReleaseImage(&grayImage);
cvReleaseImage(&cropImage);
}
嗨!我只想问这个代码。我试图识别图像的最外边缘并根据它们裁剪图像。跑完后我所有的是一个大小相同的黑色图像。我想以错误的方式去做吗?请赐教我我是OpenCV的初学者。OpenCV根据像素值调整大小和裁剪图像
我会在每个步骤之间粘贴一堆'cvSaveImage()'调用来查看它实际上变得不正确的地方。 – dragonroot
我做了一些编辑。可能是什么问题,为什么输出图像只是相同的二进制图像? – cmsl
这个问题的答案是否成功?请查看答案并接受解决问题的答案。只需点击附近的复选框选择正式答案。通过这样做你会帮助未来的游客。 – karlphillip