我将图像转换为灰度,然后读取像这样的像素
for (int i = 0; i < image.getHeight(); i++)
{
for (int j = 0; j < image.getWidth(); j++)
{
pixels[k]=(byte) (image.getPixel(j, i));
pixels2[k]=unsignedToBytes(pixels[k]);
k++;
}
}
并执行边缘检测现在获得正字节数组,所以我应该如何再次显示它,因为图像尝试了这个但没有得到结果
imageView1.setImageBitmap(BitmapFactory.decodeByteArray(edgeImage1, 0, edgeImage1.length));
请帮助我们......
public int edgedetection6(int[][] oimage,int tblock)
{
ImageView imageView1 = (ImageView) findViewById(R.id.imgView1);
int edgeImage[][]=new int[42][42];
byte edgeImage1[]=new byte[42*42];
int n=0;
//int s[][]={{-1,-1,-1},{-1,8,-1},{-1,-1,-1}};
long R=0;
for(int i=0;i<42;i++)
{
for(int j=0;j<42;j++)
{
if(i==0 || j==0 || i==41 || j==41 )
edgeImage[i][j]=0;
else
edgeImage[i][j]=oimage[i-1][j-1];
}
}
for(int i=0;i<40;i++)
{
for(int j=0;j<40;j++)
{
R=8*edgeImage[i+1][j+1]-(edgeImage[i][j]+edgeImage[i][j+1]+edgeImage[i][j+2]+edgeImage[i+1][j]+edgeImage[i+1][j+2]+edgeImage[i+2][j]+edgeImage[i+2][j+1]+edgeImage[i+2][j+2]);
if(R>0)
edgeImage[i+1][j+1]=1;
else
edgeImage[i+1][j+1]=0;
edgeImage1[n]=(byte)edgeImage[i][j];
n++;
}
}
ImageView imageView1 = (ImageView) findViewById(R.id.imgView1);
imageView1.setImageBitmap(BitmapFactory.decodeByteArray(edgeImage1, 0, edgeImage.length));
}
答案 0 :(得分:0)
传递额外的行和列为框架状图案可以......
但我认为您发布的边缘检测代码很冒险..
让我为您提供样品进行边缘检测..
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
public class ImageProcessingActivity extends Activity {
final static int KERNAL_WIDTH = 3;
final static int KERNAL_HEIGHT = 3;
int[][] kernal ={
{0, -1, 0},
{-1, 4, -1},
{0, -1, 0}
};
ImageView imageSource, imageAfter;
Bitmap bitmap_Source;
ProgressBar progressBar;
private Handler handler;
Bitmap afterProcess;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageSource = (ImageView)findViewById(R.id.imageSource);
imageAfter = (ImageView)findViewById(R.id.imageAfter);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
bitmap_Source = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
handler = new Handler();
StratBackgroundProcess();
}
private void StratBackgroundProcess(){
Runnable runnable = new Runnable(){
@Override
public void run() {
afterProcess = processingBitmap(bitmap_Source, kernal);
handler.post(new Runnable(){
@Override
public void run() {
progressBar.setVisibility(View.GONE);
imageAfter.setImageBitmap(afterProcess);
}
});
}
};
new Thread(runnable).start();
}
private Bitmap processingBitmap(Bitmap src, int[][] knl){
Bitmap dest = Bitmap.createBitmap(
src.getWidth(), src.getHeight(), src.getConfig());
int bmWidth = src.getWidth();
int bmHeight = src.getHeight();
int bmWidth_MINUS_2 = bmWidth - 2;
int bmHeight_MINUS_2 = bmHeight - 2;
for(int i = 1; i <= bmWidth_MINUS_2; i++){
for(int j = 1; j <= bmHeight_MINUS_2; j++){
//get the surround 3*3 pixel of current src[i][j] into a matrix subSrc[][]
int[][] subSrc = new int[KERNAL_WIDTH][KERNAL_HEIGHT];
for(int k = 0; k < KERNAL_WIDTH; k++){
for(int l = 0; l < KERNAL_HEIGHT; l++){
subSrc[k][l] = src.getPixel(i-1+k, j-1+l);
}
}
//subSum = subSrc[][] * knl[][]
int subSumA = 0;
int subSumR = 0;
int subSumG = 0;
int subSumB = 0;
for(int k = 0; k < KERNAL_WIDTH; k++){
for(int l = 0; l < KERNAL_HEIGHT; l++){
subSumR += Color.red(subSrc[k][l]) * knl[k][l];
subSumG += Color.green(subSrc[k][l]) * knl[k][l];
subSumB += Color.blue(subSrc[k][l]) * knl[k][l];
}
}
subSumA = Color.alpha(src.getPixel(i, j));
if(subSumR <0){
subSumR = 0;
}else if(subSumR > 255){
subSumR = 255;
}
if(subSumG <0){
subSumG = 0;
}else if(subSumG > 255){
subSumG = 255;
}
if(subSumB <0){
subSumB = 0;
}else if(subSumB > 255){
subSumB = 255;
}
dest.setPixel(i, j, Color.argb(
subSumA,
subSumR,
subSumG,
subSumB));
}
}
return dest;
}
}
并在main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Original" />
<ImageView
android:id="@+id/imageSource"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Result" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageAfter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
我认为这是一个完整的代码..你会对你的项目有所了解......
希望这会有所帮助......