Re: [問題] OPENCV存圖

看板C_and_CPP (C/C++)作者 (のヮの)時間15年前 (2011/01/19 18:19), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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
他不想把原本的程式流程改亂掉, 所以堅持一定要放回img1
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
文章代碼(AID): #1DDhhEj0 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
5
23
完整討論串 (本文為第 2 之 2 篇):
5
23
文章代碼(AID): #1DDhhEj0 (C_and_CPP)