Advertisement
Guest User

Untitled

a guest
Jan 9th, 2013
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.94 KB | None | 0 0
  1. package org.opencv.samples.imagemanipulations;
  2.  
  3. import java.util.Arrays;
  4. import android.widget.Toast;
  5.  
  6. import org.opencv.android.Utils;
  7. import org.opencv.core.Core;
  8. import org.opencv.core.Mat;
  9. import org.opencv.core.MatOfFloat;
  10. import org.opencv.core.MatOfInt;
  11. import org.opencv.core.Size;
  12. import org.opencv.core.Point;
  13. import org.opencv.core.Scalar;
  14. import org.opencv.core.CvType;
  15. import org.opencv.imgproc.Imgproc;
  16. import org.opencv.highgui.Highgui;
  17. import org.opencv.highgui.VideoCapture;
  18.  
  19. import android.content.Context;
  20. import android.graphics.Bitmap;
  21. import android.util.Log;
  22. import android.view.SurfaceHolder;
  23.  
  24. class ImageManipulationsView extends SampleCvViewBase {
  25. private Size mSize0;
  26. private Size mSizeRgba;
  27. private Size mSizeRgbaInner;
  28.  
  29. private Mat mRgba;
  30. private Mat mGray;
  31. private Mat mIntermediateMat;
  32. /*private Mat mHist, mMat0;*/
  33. /*private MatOfInt mChannels[], mHistSize;*/
  34. /*private int mHistSizeNum;*/
  35. /*private MatOfFloat mRanges;
  36. private Scalar mColorsRGB[], mColorsHue[], mWhilte;
  37. private Point mP1, mP2;*/
  38. float mBuff[];
  39.  
  40. private Mat mRgbaInnerWindow;
  41. private Mat mGrayInnerWindow;
  42. private Mat mBlurWindow;
  43. private Mat mZoomWindow;
  44. private Mat mZoomCorner;
  45.  
  46. private Mat mSepiaKernel;
  47.  
  48. private int ADAPTIVE_THRESH_MEAN_C;
  49. private int THRESH_BINARY;
  50.  
  51. public Context context;
  52.  
  53. public ImageManipulationsView(Context context) {
  54. super(context);
  55.  
  56. mSepiaKernel = new Mat(4, 4, CvType.CV_32F);
  57. mSepiaKernel.put(0, 0, /* R */0.189f, 0.769f, 0.393f, 0f);
  58. mSepiaKernel.put(1, 0, /* G */0.168f, 0.686f, 0.349f, 0f);
  59. mSepiaKernel.put(2, 0, /* B */0.131f, 0.534f, 0.272f, 0f);
  60. mSepiaKernel.put(3, 0, /* A */0.000f, 0.000f, 0.000f, 1f);
  61. }
  62.  
  63. @Override
  64. public void surfaceCreated(SurfaceHolder holder) {
  65. synchronized (this) {
  66. // initialize Mats before usage
  67. mGray = new Mat();
  68. mRgba = new Mat();
  69. mIntermediateMat = new Mat();
  70. mSize0 = new Size();
  71. /* mHist = new Mat();
  72. mChannels = new MatOfInt[] { new MatOfInt(0), new MatOfInt(1), new MatOfInt(2) };
  73. mHistSizeNum = 25;
  74. mBuff = new float[mHistSizeNum];
  75. mHistSize = new MatOfInt(mHistSizeNum);
  76. mRanges = new MatOfFloat(0f, 256f);
  77. mMat0 = new Mat();
  78. mColorsRGB = new Scalar[] { new Scalar(200, 0, 0, 255), new Scalar(0, 200, 0, 255), new Scalar(0, 0, 200, 255) };
  79. mColorsHue = new Scalar[] {
  80. new Scalar(255, 0, 0, 255), new Scalar(255, 60, 0, 255), new Scalar(255, 120, 0, 255), new Scalar(255, 180, 0, 255), new Scalar(255, 240, 0, 255),
  81. new Scalar(215, 213, 0, 255), new Scalar(150, 255, 0, 255), new Scalar(85, 255, 0, 255), new Scalar(20, 255, 0, 255), new Scalar(0, 255, 30, 255),
  82. new Scalar(0, 255, 85, 255), new Scalar(0, 255, 150, 255), new Scalar(0, 255, 215, 255), new Scalar(0, 234, 255, 255), new Scalar(0, 170, 255, 255),
  83. new Scalar(0, 120, 255, 255), new Scalar(0, 60, 255, 255), new Scalar(0, 0, 255, 255), new Scalar(64, 0, 255, 255), new Scalar(120, 0, 255, 255),
  84. new Scalar(180, 0, 255, 255), new Scalar(255, 0, 255, 255), new Scalar(255, 0, 215, 255), new Scalar(255, 0, 85, 255), new Scalar(255, 0, 0, 255)
  85. };
  86. mWhilte = Scalar.all(255);
  87. mP1 = new Point();
  88. mP2 = new Point();
  89. } */
  90.  
  91. super.surfaceCreated(holder);}
  92. }
  93.  
  94. private void CreateAuxiliaryMats() {
  95. if (mRgba.empty())
  96. return;
  97.  
  98. mSizeRgba = mRgba.size();
  99.  
  100. int rows = (int) mSizeRgba.height;
  101. int cols = (int) mSizeRgba.width;
  102.  
  103. int left = cols / 8;
  104. int top = rows / 8;
  105.  
  106. int width = cols * 3 / 4;
  107. int height = rows * 3 / 4;
  108.  
  109. if (mRgbaInnerWindow == null)
  110. mRgbaInnerWindow = mRgba.submat(top, top + height, left, left + width);
  111. mSizeRgbaInner = mRgbaInnerWindow.size();
  112.  
  113. if (mGrayInnerWindow == null && !mGray.empty())
  114. mGrayInnerWindow = mGray.submat(top, top + height, left, left + width);
  115.  
  116. if (mBlurWindow == null)
  117. mBlurWindow = mRgba.submat(0, rows, cols / 3, cols * 2 / 3);
  118.  
  119. if (mZoomCorner == null)
  120. mZoomCorner = mRgba.submat(0, rows / 2 - rows / 10, 0, cols / 2 - cols / 10);
  121.  
  122. if (mZoomWindow == null)
  123. mZoomWindow = mRgba.submat(rows / 2 - 9 * rows / 100, rows / 2 + 9 * rows / 100, cols / 2 - 9 * cols / 100, cols / 2 + 9 * cols / 100);
  124. }
  125.  
  126. @Override
  127. protected Bitmap processFrame(VideoCapture capture) {
  128. switch (ImageManipulationsActivity.viewMode) {
  129.  
  130. case ImageManipulationsActivity.VIEW_MODE_RGBA:
  131. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  132. break;
  133.  
  134.  
  135. /* case ImageManipulationsActivity.VIEW_MODE_SOBEL:
  136. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  137. capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
  138.  
  139. if (mRgbaInnerWindow == null || mGrayInnerWindow == null)
  140. CreateAuxiliaryMats();
  141.  
  142. Imgproc.Sobel(mGrayInnerWindow, mIntermediateMat, CvType.CV_8U, 1, 1);
  143. Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
  144. Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
  145. break;
  146.  
  147. case ImageManipulationsActivity.VIEW_MODE_SEPIA:
  148. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  149. Core.transform(mRgba, mRgba, mSepiaKernel);
  150. break;
  151.  
  152. case ImageManipulationsActivity.VIEW_MODE_ZOOM:
  153. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  154. if (mZoomCorner == null || mZoomWindow == null)
  155. CreateAuxiliaryMats();
  156. Imgproc.resize(mZoomWindow, mZoomCorner, mZoomCorner.size());
  157.  
  158. Size wsize = mZoomWindow.size();
  159. Core.rectangle(mZoomWindow, new Point(1, 1), new Point(wsize.width - 2, wsize.height - 2), new Scalar(255, 0, 0, 255), 2);
  160. break; */
  161.  
  162. /*case ImageManipulationsActivity.VIEW_MODE_PIXELIZE:
  163. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  164. if (mRgbaInnerWindow == null)
  165. CreateAuxiliaryMats();
  166. Imgproc.resize(mRgbaInnerWindow, mIntermediateMat, mSize0, 0.1, 0.1, Imgproc.INTER_NEAREST);
  167. Imgproc.resize(mIntermediateMat, mRgbaInnerWindow, mSizeRgbaInner, 0., 0., Imgproc.INTER_NEAREST);
  168. break;
  169.  
  170. case ImageManipulationsActivity.VIEW_MODE_POSTERIZE:
  171. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  172. if (mRgbaInnerWindow == null)
  173. CreateAuxiliaryMats();
  174. /*
  175. Imgproc.cvtColor(mRgbaInnerWindow, mIntermediateMat, Imgproc.COLOR_RGBA2RGB);
  176. Imgproc.pyrMeanShiftFiltering(mIntermediateMat, mIntermediateMat, 5, 50);
  177. Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_RGB2RGBA);
  178.  
  179. Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 80, 90);
  180. mRgbaInnerWindow.setTo(new Scalar(0, 0, 0, 255), mIntermediateMat);
  181. Core.convertScaleAbs(mRgbaInnerWindow, mIntermediateMat, 1./16, 0);
  182. Core.convertScaleAbs(mIntermediateMat, mRgbaInnerWindow, 16, 0);
  183. break; */
  184.  
  185. case ImageManipulationsActivity.VIEW_MODE_MEDIAN:
  186. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  187. if (mRgbaInnerWindow == null|| mGrayInnerWindow == null)
  188. CreateAuxiliaryMats();
  189. long start = System.currentTimeMillis();
  190. Imgproc.medianBlur(mRgbaInnerWindow, mIntermediateMat, 25);
  191. Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 1./10, 0);
  192. Core.convertScaleAbs(mIntermediateMat, mRgbaInnerWindow, 10, 0);
  193. long end = System.currentTimeMillis();
  194. long elapse = end - start;
  195. Toast.makeText(ImageManipulationsView.this, "" + elapse + "ms is used to", Toast.LENGTH_LONG).show();
  196. /*System.out.print("" + elapse + "ms");
  197. /*Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);*/
  198.  
  199. break;
  200.  
  201. /*
  202. case ImageManipulationsActivity.VIEW_MODE_CANNY:
  203. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  204.  
  205. if (mRgbaInnerWindow == null || mGrayInnerWindow == null)
  206. CreateAuxiliaryMats();
  207. Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 80, 90);
  208. Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
  209. break;*/
  210.  
  211. case ImageManipulationsActivity.VIEW_MODE_ATHRESHOLD:
  212. capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
  213. capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
  214. if (mRgbaInnerWindow == null|| mGrayInnerWindow == null)
  215. CreateAuxiliaryMats();
  216. Imgproc.adaptiveThreshold(mGrayInnerWindow, mIntermediateMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 15, 4 );
  217. Core.convertScaleAbs(mIntermediateMat, mIntermediateMat, 10, 0);
  218. Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4);
  219. break;
  220.  
  221. }
  222.  
  223. Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
  224.  
  225. try {
  226. Utils.matToBitmap(mRgba, bmp);
  227. return bmp;
  228. } catch(Exception e) {
  229. Log.e("org.opencv.samples.puzzle15", "Utils.matToBitmap() throws an exception: " + e.getMessage());
  230. bmp.recycle();
  231. return null;
  232. }
  233. }
  234.  
  235. @Override
  236. public void run() {
  237. super.run();
  238.  
  239. synchronized (this) {
  240. // Explicitly deallocate Mats
  241. if (mZoomWindow != null)
  242. mZoomWindow.release();
  243. if (mZoomCorner != null)
  244. mZoomCorner.release();
  245. if (mBlurWindow != null)
  246. mBlurWindow.release();
  247. if (mGrayInnerWindow != null)
  248. mGrayInnerWindow.release();
  249. if (mRgbaInnerWindow != null)
  250. mRgbaInnerWindow.release();
  251. if (mRgba != null)
  252. mRgba.release();
  253. if (mGray != null)
  254. mGray.release();
  255. if (mIntermediateMat != null)
  256. mIntermediateMat.release();
  257.  
  258. mRgba = null;
  259. mGray = null;
  260. mIntermediateMat = null;
  261. mRgbaInnerWindow = null;
  262. mGrayInnerWindow = null;
  263. mBlurWindow = null;
  264. mZoomCorner = null;
  265. mZoomWindow = null;
  266. }
  267. }
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement