<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在做影象處理時,有時候會需要適當地進行一些裁剪工作,比如我做干涉測量領域,我們所要處理的影象區域是條紋所在區域,而原圖又遠大於我所想分析的目標區,此時就需要對影象進行裁剪,這樣做的好處:
1)縮減計算量,提高程式執行速度;
2)裁剪後的影象尺寸正好是歸一化的影象尺寸,如果有歸一化的需求,可以直接用裁剪影象尺寸建立歸一化資料網格圖。
我就是為了計算柱面的擬合係數才寫了這個函數,若要得到同光學領域標準一致的係數,需要先歸一化資料,而歸一化的範圍就正好是裁剪的影象大小。
函數通俗易懂,就是用掩膜鎖定目標區,再分析掩膜在原圖中的上下左右邊界,用roi提取出來即可。
話不多說,下方為具體實現函數和測試程式碼。
/** * @brief ImageCropping 影象裁剪 * @param phase 所需裁剪的影象 * @return 裁剪後影象 */ cv::Mat ImageCropping(const cv::Mat &phase) { // 非測量區一般都進行了NaN處理,所以掩膜繪製只需要判斷是否為NaN值即可 cv::Mat mask = cv::Mat::zeros(phase.size(), CV_8UC1); mask.setTo(255, phase == phase); int roi_up = 10000; int roi_down = 0; int roi_left = 10000; int roi_right = 0; int row = phase.rows; int col = phase.cols; for (int i = 0; i < row; i++) { uchar *m = mask.ptr<uchar>(i); for (int j = 0; j < col; j++) { if (m[j] != 0) { if (j < roi_left)roi_left = j; if (j > roi_right)roi_right = j; if (i < roi_up)roi_up = i; if (i > roi_down)roi_down = i; } } } int w = roi_right - roi_left; int h = roi_down - roi_up; // 一般提取奇數尺寸,方便計算 if (w % 2 == 0)w++; if (h % 2 == 0)h++; cv::Mat crop_phase = phase(cv::Rect(roi_left, roi_up, w, h)).clone(); return crop_phase; }
#include<iostream> #include<opencv2/opencv.hpp> #include<ctime> using namespace std; using namespace cv; cv::Mat ImageCropping(const cv::Mat &phase); int main(void) { cv::Mat phase(100, 100, CV_32FC1, nan("")); cv::circle(phase, cv::Point(50, 50), 30, 255, -1); cv::Mat crop = ImageCropping(phase); imshow("original", phase); imshow("result", crop); waitKey(0); system("pause"); return 0; } /** * @brief ImageCropping 影象裁剪 * @param phase 所需裁剪的影象 * @return 裁剪後影象 */ cv::Mat ImageCropping(const cv::Mat &phase) { // 非測量區一般都進行了NaN處理,所以掩膜繪製只需要判斷是否為NaN值即可 cv::Mat mask = cv::Mat::zeros(phase.size(), CV_8UC1); mask.setTo(255, phase == phase); int roi_up = 10000; int roi_down = 0; int roi_left = 10000; int roi_right = 0; int row = phase.rows; int col = phase.cols; for (int i = 0; i < row; i++) { uchar *m = mask.ptr<uchar>(i); for (int j = 0; j < col; j++) { if (m[j] != 0) { if (j < roi_left)roi_left = j; if (j > roi_right)roi_right = j; if (i < roi_up)roi_up = i; if (i > roi_down)roi_down = i; } } } int w = roi_right - roi_left; int h = roi_down - roi_up; // 一般提取奇數尺寸,方便計算 if (w % 2 == 0)w++; if (h % 2 == 0)h++; cv::Mat crop_phase = phase(cv::Rect(roi_left, roi_up, w, h)).clone(); return crop_phase; }
圖1 裁剪前後對比圖
在測試案例中,隨機生成了一個100*100的資料矩陣,中間一個30半徑的圓,也是我需要的目標區域,運用ImageCropping函數實現了目標區域的提取。
到此這篇關於C++實現影象目標區裁剪ImageCropping的文章就介紹到這了,更多相關C++目標裁剪ImageCropping內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45