日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。

發(fā)布時(shí)間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CvvImage.h代碼:



  1. #pragma?once??
  2. #ifndef?CVVIMAGE_CLASS_DEF??
  3. #define?CVVIMAGE_CLASS_DEF??
  4. #include?"opencv.hpp"??
  5. /*?CvvImage?class?definition?*/??
  6. class??CvvImage??
  7. {??
  8. public:??
  9. ???CvvImage();??
  10. ???virtual?~CvvImage();??
  11. ???/*?Create?image?(BGR?or?grayscale)?*/??
  12. ???virtual?bool??Create(?int?width,?int?height,?int?bits_per_pixel,?int?image_origin?=?0?);??
  13. ???/*?Load?image?from?specified?file?*/??
  14. ???virtual?bool??Load(?const?char*?filename,?int?desired_color?=?1?);??
  15. ???/*?Load?rectangle?from?the?file?*/??
  16. ???virtual?bool??LoadRect(?const?char*?filename,??
  17. ??????int?desired_color,?CvRect?r?);??
  18. #if?defined?WIN32?||?defined?_WIN32??
  19. ???virtual?bool??LoadRect(?const?char*?filename,??
  20. ??????int?desired_color,?RECT?r?)??
  21. ???{??
  22. ??????return?LoadRect(?filename,?desired_color,??
  23. ?????????cvRect(?r.left,?r.top,?r.right?-?r.left,?r.bottom?-?r.top?));??
  24. ???}??
  25. #endif??
  26. ???/*?Save?entire?image?to?specified?file.?*/??
  27. ???virtual?bool??Save(?const?char*?filename?);??
  28. ???/*?Get?copy?of?input?image?ROI?*/??
  29. ???virtual?void??CopyOf(?CvvImage&?image,?int?desired_color?=?-1?);??
  30. ???virtual?void??CopyOf(?IplImage*?img,?int?desired_color?=?-1?);??
  31. ???IplImage*?GetImage()?{?return?m_img;?};??
  32. ???virtual?void??Destroy(void);??
  33. ???/*?width?and?height?of?ROI?*/??
  34. ???int?Width()?{?return?!m_img???0?:?!m_img->roi???m_img->width?:?m_img->roi->width;?};??
  35. ???int?Height()?{?return?!m_img???0?:?!m_img->roi???m_img->height?:?m_img->roi->height;};??
  36. ???int?Bpp()?{?return?m_img???(m_img->depth?&?255)*m_img->nChannels?:?0;?};??
  37. ???virtual?void??Fill(?int?color?);??
  38. ???/*?draw?to?highgui?window?*/??
  39. ???virtual?void??Show(?const?char*?window?);??
  40. ??
  41. #if?defined?WIN32?||?defined?_WIN32??
  42. ???/*?draw?part?of?image?to?the?specified?DC?*/??
  43. ???virtual?void??Show(?HDC?dc,?int?x,?int?y,?int?width,?int?height,??
  44. ??????int?from_x?=?0,?int?from_y?=?0?);??
  45. ???/*?draw?the?current?image?ROI?to?the?specified?rectangle?of?the?destination?DC?*/??
  46. ???virtual?void??DrawToHDC(?HDC?hDCDst,?RECT*?pDstRect?);??
  47. #endif??
  48. protected:??
  49. ???IplImage*??m_img;??
  50. };??
  51. typedef?CvvImage?CImage;??
  52. #endif?

CvvImage.cpp代碼:


  1. #include?"StdAfx.h"??
  2. #include?"CvvImage.h"??
  3. //??
  4. //?Construction/Destruction??
  5. //??
  6. CV_INLINE?RECT?NormalizeRect(?RECT?r?);??
  7. CV_INLINE?RECT?NormalizeRect(?RECT?r?)??
  8. {??
  9. ???int?t;??
  10. ???if(?r.left?>?r.right?)??
  11. ???{??
  12. ??????t?=?r.left;??
  13. ??????r.left?=?r.right;??
  14. ??????r.right?=?t;??
  15. ???}??
  16. ???if(?r.top?>?r.bottom?)??
  17. ???{??
  18. ??????t?=?r.top;??
  19. ??????r.top?=?r.bottom;??
  20. ??????r.bottom?=?t;??
  21. ???}??
  22. ??
  23. ???return?r;??
  24. }??
  25. CV_INLINE?CvRect?RectToCvRect(?RECT?sr?);??
  26. CV_INLINE?CvRect?RectToCvRect(?RECT?sr?)??
  27. {??
  28. ???sr?=?NormalizeRect(?sr?);??
  29. ???return?cvRect(?sr.left,?sr.top,?sr.right?-?sr.left,?sr.bottom?-?sr.top?);??
  30. }??
  31. CV_INLINE?RECT?CvRectToRect(?CvRect?sr?);??
  32. CV_INLINE?RECT?CvRectToRect(?CvRect?sr?)??
  33. {??
  34. ???RECT?dr;??
  35. ???dr.left?=?sr.x;??
  36. ???dr.top?=?sr.y;??
  37. ???dr.right?=?sr.x?+?sr.width;??
  38. ???dr.bottom?=?sr.y?+?sr.height;??
  39. ??
  40. ???return?dr;??
  41. }??
  42. CV_INLINE?IplROI?RectToROI(?RECT?r?);??
  43. CV_INLINE?IplROI?RectToROI(?RECT?r?)??
  44. {??
  45. ???IplROI?roi;??
  46. ???r?=?NormalizeRect(?r?);??
  47. ???roi.xOffset?=?r.left;??
  48. ???roi.yOffset?=?r.top;??
  49. ???roi.width?=?r.right?-?r.left;??
  50. ???roi.height?=?r.bottom?-?r.top;??
  51. ???roi.coi?=?0;??
  52. ??
  53. ???return?roi;??
  54. }??
  55. void??FillBitmapInfo(?BITMAPINFO*?bmi,?int?width,?int?height,?int?bpp,?int?origin?)??
  56. {??
  57. ???assert(?bmi?&&?width?>=?0?&&?height?>=?0?&&?(bpp?==?8?||?bpp?==?24?||?bpp?==?32));??
  58. ??
  59. ???BITMAPINFOHEADER*?bmih?=?&(bmi->bmiHeader);??
  60. ??
  61. ???memset(?bmih,?0,?sizeof(*bmih));??
  62. ???bmih->biSize?=?sizeof(BITMAPINFOHEADER);??
  63. ???bmih->biWidth?=?width;??
  64. ???bmih->biHeight?=?origin???abs(height)?:?-abs(height);??
  65. ???bmih->biPlanes?=?1;??
  66. ???bmih->biBitCount?=?(unsigned?short)bpp;??
  67. ???bmih->biCompression?=?BI_RGB;??
  68. ???if(?bpp?==?8?)??
  69. ???{??
  70. ??????RGBQUAD*?palette?=?bmi->bmiColors;??
  71. ??????int?i;??
  72. ??????for(?i?=?0;?i?<?256;?i++?)??
  73. ??????{??
  74. ?????????palette[i].rgbBlue?=?palette[i].rgbGreen?=?palette[i].rgbRed?=?(BYTE)i;??
  75. ?????????palette[i].rgbReserved?=?0;??
  76. ??????}??
  77. ???}??
  78. }??
  79. CvvImage::CvvImage()??
  80. {??
  81. ???m_img?=?0;??
  82. }??
  83. void?CvvImage::Destroy()??
  84. {??
  85. ???cvReleaseImage(?&m_img?);??
  86. }??
  87. CvvImage::~CvvImage()??
  88. {??
  89. ???Destroy();??
  90. }??
  91. bool??CvvImage::Create(?int?w,?int?h,?int?bpp,?int?origin?)??
  92. {??
  93. ???const?unsigned?max_img_size?=?10000;??
  94. ??
  95. ???if(?(bpp?!=?8?&&?bpp?!=?24?&&?bpp?!=?32)?||??
  96. ??????(unsigned)w?>=??max_img_size?||?(unsigned)h?>=?max_img_size?||??
  97. ??????(origin?!=?IPL_ORIGIN_TL?&&?origin?!=?IPL_ORIGIN_BL))??
  98. ???{??
  99. ??????assert(0);?//?most?probably,?it?is?a?programming?error??
  100. ??????return?false;??
  101. ???}??
  102. ???if(?!m_img?||?Bpp()?!=?bpp?||?m_img->width?!=?w?||?m_img->height?!=?h?)??
  103. ???{??
  104. ??????if(?m_img?&&?m_img->nSize?==?sizeof(IplImage))??
  105. ?????????Destroy();??
  106. ??????/*?prepare?IPL?header?*/??
  107. ??????m_img?=?cvCreateImage(?cvSize(?w,?h?),?IPL_DEPTH_8U,?bpp/8?);??
  108. ???}??
  109. ???if(?m_img?)??
  110. ??????m_img->origin?=?origin?==?0???IPL_ORIGIN_TL?:?IPL_ORIGIN_BL;??
  111. ???return?m_img?!=?0;??
  112. }??
  113. void??CvvImage::CopyOf(?CvvImage&?image,?int?desired_color?)??
  114. {??
  115. ???IplImage*?img?=?image.GetImage();??
  116. ???if(?img?)??
  117. ???{??
  118. ??????CopyOf(?img,?desired_color?);??
  119. ???}??
  120. }??
  121. #define?HG_IS_IMAGE(img)??????????????????????????????????????????????????\??
  122. ???((img)?!=?0?&&?((const?IplImage*)(img))->nSize?==?sizeof(IplImage)?&&?\??
  123. ???((IplImage*)img)->imageData?!=?0)??
  124. void??CvvImage::CopyOf(?IplImage*?img,?int?desired_color?)??
  125. {??
  126. ???if(?HG_IS_IMAGE(img)?)??
  127. ???{??
  128. ??????int?color?=?desired_color;??
  129. ??????CvSize?size?=?cvGetSize(?img?);???
  130. ??????if(?color?<?0?)??
  131. ?????????color?=?img->nChannels?>?1;??
  132. ??????if(?Create(?size.width,?size.height,??
  133. ?????????(!color???1?:?img->nChannels?>?1???img->nChannels?:?3)*8,??
  134. ?????????img->origin?))??
  135. ??????{??
  136. ?????????cvConvertImage(?img,?m_img,?0?);??
  137. ??????}??
  138. ???}??
  139. }??
  140. bool??CvvImage::Load(?const?char*?filename,?int?desired_color?)??
  141. {??
  142. ???IplImage*?img?=?cvLoadImage(?filename,?desired_color?);??
  143. ???if(?!img?)??
  144. ??????return?false;??
  145. ??
  146. ???CopyOf(?img,?desired_color?);??
  147. ???cvReleaseImage(?&img?);??
  148. ??
  149. ???return?true;??
  150. }??
  151. bool??CvvImage::LoadRect(?const?char*?filename,??
  152. ???????????????????int?desired_color,?CvRect?r?)??
  153. {??
  154. ???if(?r.width?<?0?||?r.height?<?0?)?return?false;??
  155. ??
  156. ???IplImage*?img?=?cvLoadImage(?filename,?desired_color?);??
  157. ???if(?!img?)??
  158. ??????return?false;??
  159. ???if(?r.width?==?0?||?r.height?==?0?)??
  160. ???{??
  161. ??????r.width?=?img->width;??
  162. ??????r.height?=?img->height;??
  163. ??????r.x?=?r.y?=?0;??
  164. ???}??
  165. ???if(?r.x?>?img->width?||?r.y?>?img->height?||??
  166. ??????r.x?+?r.width?<?0?||?r.y?+?r.height?<?0?)??
  167. ???{??
  168. ??????cvReleaseImage(?&img?);??
  169. ??????return?false;??
  170. ???}??
  171. ???/*?truncate?r?to?source?image?*/??
  172. ???if(?r.x?<?0?)??
  173. ???{??
  174. ??????r.width?+=?r.x;??
  175. ??????r.x?=?0;??
  176. ???}??
  177. ???if(?r.y?<?0?)??
  178. ???{??
  179. ??????r.height?+=?r.y;??
  180. ??????r.y?=?0;??
  181. ???}??
  182. ???if(?r.x?+?r.width?>?img->width?)??
  183. ??????r.width?=?img->width?-?r.x;??
  184. ??
  185. ???if(?r.y?+?r.height?>?img->height?)??
  186. ??????r.height?=?img->height?-?r.y;??
  187. ???cvSetImageROI(?img,?r?);??
  188. ???CopyOf(?img,?desired_color?);??
  189. ???cvReleaseImage(?&img?);??
  190. ???return?true;??
  191. }??
  192. bool??CvvImage::Save(?const?char*?filename?)??
  193. {??
  194. ???if(?!m_img?)??
  195. ??????return?false;??
  196. ???cvSaveImage(?filename,?m_img?);??
  197. ???return?true;??
  198. }??
  199. void??CvvImage::Show(?const?char*?window?)??
  200. {??
  201. ???if(?m_img?)??
  202. ??????cvShowImage(?window,?m_img?);??
  203. }??
  204. void??CvvImage::Show(?HDC?dc,?int?x,?int?y,?int?w,?int?h,?int?from_x,?int?from_y?)??
  205. {??
  206. ???if(?m_img?&&?m_img->depth?==?IPL_DEPTH_8U?)??
  207. ???{??
  208. ??????uchar?buffer[sizeof(BITMAPINFOHEADER)?+?1024];??
  209. ??????BITMAPINFO*?bmi?=?(BITMAPINFO*)buffer;??
  210. ??????int?bmp_w?=?m_img->width,?bmp_h?=?m_img->height;??
  211. ??????FillBitmapInfo(?bmi,?bmp_w,?bmp_h,?Bpp(),?m_img->origin?);??
  212. ??????from_x?=?MIN(?MAX(?from_x,?0?),?bmp_w?-?1?);??
  213. ??????from_y?=?MIN(?MAX(?from_y,?0?),?bmp_h?-?1?);??
  214. ??????int?sw?=?MAX(?MIN(?bmp_w?-?from_x,?w?),?0?);??
  215. ??????int?sh?=?MAX(?MIN(?bmp_h?-?from_y,?h?),?0?);??
  216. ??????SetDIBitsToDevice(??
  217. ?????????dc,?x,?y,?sw,?sh,?from_x,?from_y,?from_y,?sh,??
  218. ?????????m_img->imageData?+?from_y*m_img->widthStep,??
  219. ?????????bmi,?DIB_RGB_COLORS?);??
  220. ???}??
  221. }??
  222. void??CvvImage::DrawToHDC(?HDC?hDCDst,?RECT*?pDstRect?)???
  223. {??
  224. ???if(?pDstRect?&&?m_img?&&?m_img->depth?==?IPL_DEPTH_8U?&&?m_img->imageData?)??
  225. ???{??
  226. ??????uchar?buffer[sizeof(BITMAPINFOHEADER)?+?1024];??
  227. ??????BITMAPINFO*?bmi?=?(BITMAPINFO*)buffer;??
  228. ??????int?bmp_w?=?m_img->width,?bmp_h?=?m_img->height;??
  229. ??????CvRect?roi?=?cvGetImageROI(?m_img?);??
  230. ??????CvRect?dst?=?RectToCvRect(?*pDstRect?);??
  231. ??????if(?roi.width?==?dst.width?&&?roi.height?==?dst.height?)??
  232. ??????{??
  233. ?????????Show(?hDCDst,?dst.x,?dst.y,?dst.width,?dst.height,?roi.x,?roi.y?);??
  234. ?????????return;??
  235. ??????}??
  236. ??????if(?roi.width?>?dst.width?)??
  237. ??????{??
  238. ?????????SetStretchBltMode(??
  239. ????????????hDCDst,???????????//?handle?to?device?context??
  240. ????????????HALFTONE?);??
  241. ??????}??
  242. ??????else??
  243. ??????{??
  244. ?????????SetStretchBltMode(??
  245. ????????????hDCDst,???????????//?handle?to?device?context??
  246. ????????????COLORONCOLOR?);??
  247. ??????}??
  248. ??????FillBitmapInfo(?bmi,?bmp_w,?bmp_h,?Bpp(),?m_img->origin?);??
  249. ??????::StretchDIBits(??
  250. ?????????hDCDst,??
  251. ?????????dst.x,?dst.y,?dst.width,?dst.height,??
  252. ?????????roi.x,?roi.y,?roi.width,?roi.height,??
  253. ?????????m_img->imageData,?bmi,?DIB_RGB_COLORS,?SRCCOPY?);??
  254. ???}??
  255. }??
  256. void??CvvImage::Fill(?int?color?)??
  257. {??
  258. ???cvSet(?m_img,?cvScalar(color&255,(color>>8)&255,(color>>16)&255,(color>>24)&255)?);??
  259. }?

總結(jié)

以上是生活随笔為你收集整理的利用VS+MFC+Opencv显示图像和视频所需添加类(CvvImage.h和CvvImage.cpp的源码)。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚州av网 | 五月婷婷六月综合 | 中文日韩 | 俄罗斯videodesxo极品 | 久久久久国产精品夜夜夜夜夜 | 一级黄在线观看 | 男人疯狂高潮呻吟视频 | 日韩欧美不卡视频 | japan高清日本乱xxxxx | 欧美精品久久久久 | 国产成人无码精品久久久性色 | 中出精品 | 国产成人自拍视频在线观看 | 国产伦子伦对白视频 | 国产视频你懂的 | 春色av | 国产成人精品网 | 激情91 | 亚欧洲精品视频在线观看 | 日韩中文字幕网 | 麻豆视频网站入口 | 欧美三级一区 | 91丨国产丨白丝 | 粗大黑人巨茎大战欧美成人 | 天天cao在线| 亚洲黄色免费视频 | 麻豆传谋在线观看免费mv | 五月婷婷六月综合 | 日韩国产欧美在线视频 | 播放灌醉水嫩大学生国内精品 | 午夜做爰xxxⅹ性高湖视频美国 | 国产顶级毛片 | 日韩三区四区 | 凹凸视频一区二区 | 成人黄色片免费看 | 99色这里只有精品 | 黄a网站 | 无遮挡边吃摸边吃奶边做 | 欧美二区在线观看 | 欧美日韩成人在线视频 | 国产欧美日韩二区 | 男女日日 | 色综合福利 | 四川丰满少妇被弄到高潮 | 欧美做受| 99蜜桃臀久久久欧美精品网站 | 精品视频第一页 | 色大师av一区二区三区 | 色站在线 | 日韩aⅴ在线观看 | 91精品国产综合久久精品 | 成年人网站av | 国产一级生活片 | 性生交大全免费看 | www.久久综合 | av色吧| 伦伦影院午夜理伦片 | 美女国产免费 | 朋友人妻少妇精品系列 | 天天想你在线观看完整版电影免费 | 无码国产精品一区二区高潮 | wwww欧美 | 国产麻豆精品在线 | 久久综合一区二区三区 | 特黄三级| 亚欧精品在线观看 | 无码国产精品一区二区免费式直播 | www四虎影院 | 欧美大浪妇猛交饥渴大叫 | 欧美日韩国产一级片 | 中文精品一区二区三区 | 亚洲自拍偷拍色图 | 亚洲xxxx视频 | 麻豆一区二区 | 九九小视频 | 久久亚洲精品无码va白人极品 | 91精彩视频在线观看 | 免费国产黄色 | 少妇黄色片 | 91精品国产乱码久久久久久久久 | 亚洲高清免费观看 | 美女草逼视频 | xxxx日本免费 | 欧美精品久久久久久久久老牛影院 | 污污视频在线免费观看 | 在线青草 | 三年中文在线观看免费观看 | 国产视频久久久久 | 国产免费一区二区三区视频 | 久久久久爱 | 美女一区二区三区四区 | 黄色a区 | 永久免费成人 | 无码人妻精品一区二区中文 | 福利影院在线观看 | 日韩一区二区三区在线免费观看 | 一区二区三区免费 | 麻豆福利影院 | 视色视频 |