Re: [問題] OPENCV存圖
※ 引述《AMOURING (我愛你的意思)》之銘言:
: IplImage* img1;
: CvRect Rect1;
: Rect1=cvRect(0,0,15,15);
: cvSetImageROI(img1,Rect1);
: cvNamedWindow("Show Image",1);
: cvShowImage("Show Image",img1);
: cvWaitKey(0);
: 順利把我要的部份可以SHOW出影像了
: 可是我想要把那個15x15的部份
: 取代img1
: 好讓下面步驟可以用那一塊15x15來執行
: 試過直接把 img1 = Rect1 ;
: 但是不行
: 請問大家知道怎麼做嗎 ><
: 謝謝
你是想要把原始影像某個 15x15 block 裡的 pixel 存到另一張 15x15 的圖裡嗎??
先看一下官網 faq 裡面關於 pixel access 的說明
http://opencv.willowgarage.com/wiki/faq#Howtoaccessimagepixels
我是把他寫成兩個 function,針對 unsigned 8-bit 影像
CvScalar GetPixel(IplImage *img, int x, int y) {
unsigned char *ptr = (unsigned char*)(img->imageData+(img->widthStep*y));
CvScalar color = cvScalar(-1.0, -1.0, -1.0, -1.0);
for (int i = 0; i < img->nChannel; i++) {
color.val[i] = (double)ptr[(x * img->nChannel) + i];
}
return color;
}
void SetPixel(IplImage *img, int x, int y, const CvScalar &color) {
unsigned char *ptr = (unsigned char*)(img->imageData+(img->widthStep*y));
for (int i = 0; i < img->nChannel; i++) {
ptr[(x * img->nChannel) + i] = (unsigned char)color.val[i];
}
}
然後你的需求就是這樣
IplImage *img1 = load or create or something;
IplImage *img2 = cvCreateImage(cvSize(15, 15), img1->depth, img1->nChannel);
for (int y = 0; y < 15; y++) {
for (int x = 0; x < 15; x++) {
SetPixel(img2, x, y, GetPixel(img1, x, y));
}
}
不曉得我有沒有搞錯你的意思 @@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.251.174
推
01/19 18:22, , 1F
01/19 18:22, 1F
→
01/19 18:27, , 2F
01/19 18:27, 2F
推
01/19 21:43, , 3F
01/19 21:43, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章