Wad*_*nia 13 c c++ opencv image-processing
我正在使用opencv,我想从另一个图像的一部分创建一个图像.
我没有找到这样做的功能,所以我尝试实现我的想法,包括逐像素地复制图像但是徒劳无法得到我正在等待的结果.
任何人都有另一个想法
码:
#include "cv.h"
#include "highgui.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main(int argc,char** argv) {
IplImage * img =0;
uchar *data;
int i,j,k;
int height,width,widthStep,nChannels;
img=cvLoadImage(argv[1],3);
height =img->height;
width = img->width;
widthStep= img->widthStep;
nChannels = img->nChannels;
data=(uchar*)img->imageData;
IplImage* img1=cvCreateImage(cvSize(height/2,width/2),IPL_DEPTH_8U,nChannels);
for(i=0;i<height/2;i++){
for(j=0;j<width/2;j++){
for(k=0;k<3;k++){
img1->imageData[i*widthStep+j*nChannels]=data[i*widthStep+j*nChannels];
}
}
}
cvShowImage("image_Originale2",img1);
cvWaitKey(0);
cvReleaseImage(&img);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Fro*_*oyo 30
你应该使用cv::Mat复制构造函数.它比IplImage以下更好:
int x = 10,
y = 20,
width = 200,
height = 200;
Mat img1, img2;
img1 = imread("Lenna.png");
img2 = img1(Rect(x, y, width, height));
Run Code Online (Sandbox Code Playgroud)
您要完成的任务可以通过在该图像上设置ROI(感兴趣区域)并将ROI定义的该部分复制到新图像来完成.
你可以在这篇文章中看到一个演示IplImage.
这些帖子显示了ROI用于解决不同场景的用途:
请务必注意,您的代码使用的是OpenCV 的C接口.C++接口提供cv::Mat,相当于IplImage.换句话说,您正在寻找的是问题的C解决方案.
使用复制构造函数:
cv::Mat whole = ...; // from imread or anything else
cv::Mat part(
whole,
cv::Range( 20, 220 ), // rows
cv::Range( 10, 210 ));// cols
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36494 次 |
| 最近记录: |